mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-19 08:06:42 +00:00
NEVERHOOD: More work on Klayman
- Rename Scene::_playerSprite to _klayman - Send mouse clicks to the scene object (has not effect yet)
This commit is contained in:
parent
3131cc6f18
commit
c694ce8505
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -124,6 +124,8 @@ protected:
|
||||
void sub41FCF0();
|
||||
|
||||
uint32 handleMessage41F140(int messageNum, const MessageParam ¶m, Entity *sender);
|
||||
|
||||
void sub41C930(int16 x, bool flag);
|
||||
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user