diff options
Diffstat (limited to 'queen/structs.h')
-rw-r--r-- | queen/structs.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/queen/structs.h b/queen/structs.h index 289ad7874e..10377e53cb 100644 --- a/queen/structs.h +++ b/queen/structs.h @@ -36,6 +36,13 @@ struct Box { y2 = (int16)READ_BE_UINT16(ptr); ptr += 2; } + void writeTo(byte *&ptr) { + WRITE_BE_UINT16(ptr, x1); ptr += 2; + WRITE_BE_UINT16(ptr, y1); ptr += 2; + WRITE_BE_UINT16(ptr, x2); ptr += 2; + WRITE_BE_UINT16(ptr, y2); ptr += 2; + } + int16 xDiff() const { return x2 - x1; } @@ -72,6 +79,14 @@ struct Area { object = READ_BE_UINT16(ptr); ptr += 2; } + void writeTo(byte *&ptr) { + WRITE_BE_UINT16(ptr, mapNeighbours); ptr += 2; + box.writeTo(ptr); + WRITE_BE_UINT16(ptr, bottomScaleFactor); ptr += 2; + WRITE_BE_UINT16(ptr, topScaleFactor); ptr += 2; + WRITE_BE_UINT16(ptr, object); ptr += 2; + } + uint16 calcScale(int16 y) const { uint16 dy = box.y2 - box.y1; int16 ds = (int16)(topScaleFactor - bottomScaleFactor); @@ -103,6 +118,12 @@ struct WalkOffData { x = READ_BE_UINT16(ptr); ptr += 2; y = READ_BE_UINT16(ptr); ptr += 2; } + + void writeTo(byte *&ptr) { + WRITE_BE_UINT16(ptr, entryObj); ptr += 2; + WRITE_BE_UINT16(ptr, x); ptr += 2; + WRITE_BE_UINT16(ptr, y); ptr += 2; + } }; @@ -210,6 +231,17 @@ struct ObjectData { state = READ_BE_UINT16(ptr); ptr += 2; image = (int16)READ_BE_UINT16(ptr); ptr += 2; } + + void writeTo(byte *&ptr) { + WRITE_BE_UINT16(ptr, name); ptr += 2; + WRITE_BE_UINT16(ptr, x); ptr += 2; + WRITE_BE_UINT16(ptr, y); ptr += 2; + WRITE_BE_UINT16(ptr, description); ptr += 2; + WRITE_BE_UINT16(ptr, entryObj); ptr += 2; + WRITE_BE_UINT16(ptr, room); ptr += 2; + WRITE_BE_UINT16(ptr, state); ptr += 2; + WRITE_BE_UINT16(ptr, image); ptr += 2; + } }; @@ -275,6 +307,14 @@ struct ItemData { frame = READ_BE_UINT16(ptr); ptr += 2; sfxDescription = (int16)READ_BE_UINT16(ptr); ptr += 2; } + + void writeTo(byte *&ptr) { + WRITE_BE_UINT16(ptr, name); ptr += 2; + WRITE_BE_UINT16(ptr, description); ptr += 2; + WRITE_BE_UINT16(ptr, state); ptr += 2; + WRITE_BE_UINT16(ptr, frame); ptr += 2; + WRITE_BE_UINT16(ptr, sfxDescription); ptr += 2; + } }; @@ -512,6 +552,20 @@ struct Person { struct TalkSelected { int16 hasTalkedTo; int16 values[4]; + + void readFrom(byte *&ptr) { + hasTalkedTo = (int16)READ_BE_UINT16(ptr); ptr += 2; + for (int i = 0; i < 4; i++) { + values[i] = (int16)READ_BE_UINT16(ptr); ptr += 2; + } + } + + void writeTo(byte *&ptr) { + WRITE_BE_UINT16(ptr, hasTalkedTo); ptr += 2; + for (int i = 0; i < 4; i++) { + WRITE_BE_UINT16(ptr, values[i]); ptr += 2; + } + } }; |