Skip to content

Commit

Permalink
NEVERHOOD: More work on Klayman (still eye cancerous code)
Browse files Browse the repository at this point in the history
- 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)
  • Loading branch information
johndoe123 authored and wjp committed May 8, 2013
1 parent 78d632b commit 5c69ae2
Show file tree
Hide file tree
Showing 15 changed files with 770 additions and 200 deletions.
2 changes: 2 additions & 0 deletions engines/neverhood/collisionman.h
Expand Up @@ -42,6 +42,8 @@ class CollisionMan {
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;
Expand Down
33 changes: 30 additions & 3 deletions engines/neverhood/entity.h
Expand Up @@ -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...
};

Expand Down
6 changes: 3 additions & 3 deletions engines/neverhood/gamemodule.cpp
Expand Up @@ -78,17 +78,17 @@ uint32 GameModule::handleMessage(int messageNum, const MessageParam &param, 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;
Expand Down

0 comments on commit 5c69ae2

Please sign in to comment.