mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-25 05:34:27 +00:00
TSAGE: Beginnings of implementing R2R maze UI
This commit is contained in:
parent
ccdc113fe1
commit
5ba9f831a0
@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
#include "common/config-manager.h"
|
||||
#include "tsage/graphics.h"
|
||||
#include "tsage/scenes.h"
|
||||
#include "tsage/tsage.h"
|
||||
#include "tsage/staticres.h"
|
||||
@ -270,7 +271,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
|
||||
// Confrontation
|
||||
return new Scene3400();
|
||||
case 3500:
|
||||
// Maze action scene
|
||||
// Maze action sequencec
|
||||
return new Scene3500();
|
||||
case 3600:
|
||||
// Cutscene - walking at gunpoint
|
||||
@ -1274,14 +1275,19 @@ void SceneAreaObject::setDetails(int resNum, int lookLineNum, int talkLineNum, i
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
UnkObject1200::UnkObject1200() {
|
||||
MazeUI::MazeUI() {
|
||||
_field16 = _field3A = NULL;
|
||||
_field12 = _field14 = 0;
|
||||
_field26 = _field28 = _field2A = _field2C = _field2E = _field30 = 0;
|
||||
_field32 = _field34 = _field36 = _field38 = _field3E = _field40 = 0;
|
||||
_field26 = _field28 = _width = _height = _field2E = _field30 = 0;
|
||||
_resNum = _field34 = _field36 = _field38 = _field3E = _field40 = 0;
|
||||
}
|
||||
|
||||
void UnkObject1200::synchronize(Serializer &s) {
|
||||
MazeUI::~MazeUI() {
|
||||
DEALLOCATE(_field16);
|
||||
DEALLOCATE(_field3A);
|
||||
}
|
||||
|
||||
void MazeUI::synchronize(Serializer &s) {
|
||||
SavedObject::synchronize(s);
|
||||
|
||||
_rect1.synchronize(s);
|
||||
@ -1293,11 +1299,11 @@ void UnkObject1200::synchronize(Serializer &s) {
|
||||
s.syncAsSint16LE(_field14);
|
||||
s.syncAsSint16LE(_field26);
|
||||
s.syncAsSint16LE(_field28);
|
||||
s.syncAsSint16LE(_field2A);
|
||||
s.syncAsSint16LE(_field2C);
|
||||
s.syncAsSint16LE(_width);
|
||||
s.syncAsSint16LE(_height);
|
||||
s.syncAsSint16LE(_field2E);
|
||||
s.syncAsSint16LE(_field30);
|
||||
s.syncAsSint16LE(_field32);
|
||||
s.syncAsSint16LE(_resNum);
|
||||
s.syncAsSint16LE(_field34);
|
||||
s.syncAsSint16LE(_field36);
|
||||
s.syncAsSint16LE(_field38);
|
||||
@ -1305,16 +1311,58 @@ void UnkObject1200::synchronize(Serializer &s) {
|
||||
s.syncAsSint16LE(_field40);
|
||||
}
|
||||
|
||||
void UnkObject1200::sub51AE9(int arg1) {
|
||||
warning("STUB: UnkObject1200::sub51AE9()");
|
||||
void MazeUI::load(int resNum) {
|
||||
clear();
|
||||
_resNum = resNum;
|
||||
|
||||
const byte *header = g_resourceManager->getResource(RT17, resNum, 0);
|
||||
|
||||
_field34 = resNum + 1000;
|
||||
_field26 = READ_LE_UINT16(header + 2);
|
||||
_field28 = READ_LE_UINT16(header + 4);
|
||||
_field36 = 10;
|
||||
_field38 = _field36 << 3;
|
||||
|
||||
Visage visage;
|
||||
visage.setVisage(_field34, 1);
|
||||
|
||||
GfxSurface frame = visage.getFrame(2);
|
||||
_width = frame.getBounds().width();
|
||||
_height = frame.getBounds().height();
|
||||
|
||||
_field16 = ALLOCATE(_field26 * _field28 * 2);
|
||||
const byte *res = g_resourceManager->getResource(RT17, resNum, 1);
|
||||
Common::copy(res, res + (_field26 * _field28 * 2), _field16);
|
||||
|
||||
_field30 = _field2E = 0;
|
||||
_field12 = (_rect1.width() + _width - 1) / _width;
|
||||
_field14 = (_rect1.height() + _height - 1) / _height;
|
||||
|
||||
_field3E = (_field12 + 1) * _width;
|
||||
_field3A = ALLOCATE(_field3E * _height);
|
||||
|
||||
_rect2 = Rect(0, 0, _width * _field26, _height * _field28);
|
||||
}
|
||||
|
||||
int UnkObject1200::sub51AF8(Common::Point pt) {
|
||||
void MazeUI::clear() {
|
||||
if (!_resNum)
|
||||
_resNum = 1;
|
||||
|
||||
if (_field16)
|
||||
DEALLOCATE(_field16);
|
||||
_field16 = NULL;
|
||||
|
||||
DEALLOCATE(_field3A);
|
||||
_field3A = NULL;
|
||||
|
||||
}
|
||||
|
||||
int MazeUI::sub51AF8(Common::Point pt) {
|
||||
if (!_rect1.contains(pt))
|
||||
return -1;
|
||||
|
||||
int tmp1 = (pt.x - _rect1.left + _field2E) / _field2A;
|
||||
int tmp2 = (pt.y - _rect1.top + _field30) / _field2C;
|
||||
int tmp1 = (pt.x - _rect1.left + _field2E) / _width;
|
||||
int tmp2 = (pt.y - _rect1.top + _field30) / _height;
|
||||
|
||||
if ((tmp1 >= 0) && (tmp2 >= 0) && (_field26 > tmp1) && (_field28 > tmp2))
|
||||
return _field16[(((_field26 * tmp2) + tmp1)* 2)];
|
||||
@ -1322,7 +1370,7 @@ int UnkObject1200::sub51AF8(Common::Point pt) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool UnkObject1200::sub51AFD(Common::Point pt) {
|
||||
bool MazeUI::sub51AFD(Common::Point pt) {
|
||||
int retval = false;
|
||||
|
||||
_field2E = pt.x;
|
||||
@ -1351,19 +1399,19 @@ bool UnkObject1200::sub51AFD(Common::Point pt) {
|
||||
return retval;
|
||||
}
|
||||
|
||||
void UnkObject1200::sub51B02() {
|
||||
warning("STUB: UnkObject1200::sub51B02()");
|
||||
void MazeUI::sub51B02() {
|
||||
warning("STUB: MazeUI::sub51B02()");
|
||||
}
|
||||
|
||||
void UnkObject1200::sub9EDE8(Rect rect) {
|
||||
void MazeUI::sub9EDE8(Rect rect) {
|
||||
_rect1 = rect;
|
||||
warning("FIXME: UnkObject1200::sub9EDE8()");
|
||||
warning("FIXME: MazeUI::sub9EDE8()");
|
||||
// _rect1.clip(g_globals->gfxManager()._bounds);
|
||||
}
|
||||
|
||||
int UnkObject1200::sub9EE22(int &arg1, int &arg2) {
|
||||
arg1 /= _field2A;
|
||||
arg2 /= _field2C;
|
||||
int MazeUI::sub9EE22(int &arg1, int &arg2) {
|
||||
arg1 /= _width;
|
||||
arg2 /= _height;
|
||||
|
||||
if ((arg1 >= 0) && (arg2 >= 0) && (_field26 > arg1) && (_field28 > arg2)) {
|
||||
return _field16[(((_field26 * arg2) + arg1) * 2)];
|
||||
@ -1372,6 +1420,10 @@ int UnkObject1200::sub9EE22(int &arg1, int &arg2) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void Scene1200::sub9DAD6(int indx) {
|
||||
_object1.sub9EE22(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4);
|
||||
|
||||
|
@ -276,6 +276,45 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class MazeUI: public SavedObject {
|
||||
private:
|
||||
void clear();
|
||||
public:
|
||||
Rect _rect1;
|
||||
Rect _rect2;
|
||||
|
||||
byte *_field16;
|
||||
byte *_field3A;
|
||||
|
||||
int _field12;
|
||||
int _field14;
|
||||
int _field26;
|
||||
int _field28;
|
||||
int _width;
|
||||
int _height;
|
||||
int _field2E;
|
||||
int _field30;
|
||||
int _resNum;
|
||||
int _field34;
|
||||
int _field36;
|
||||
int _field38;
|
||||
int _field3E;
|
||||
int _field40;
|
||||
public:
|
||||
MazeUI();
|
||||
~MazeUI();
|
||||
void load(int resNum);
|
||||
|
||||
virtual Common::String getClassName() { return "MazeUI"; }
|
||||
void synchronize(Serializer &s);
|
||||
|
||||
int sub51AF8(Common::Point pt);
|
||||
bool sub51AFD(Common::Point pt);
|
||||
void sub51B02();
|
||||
void sub9EDE8(Rect rect);
|
||||
int sub9EE22(int &arg1, int &arg2);
|
||||
};
|
||||
|
||||
class SceneAreaObject: public SceneArea {
|
||||
class Object1: public SceneActor {
|
||||
public:
|
||||
@ -290,41 +329,6 @@ public:
|
||||
void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum);
|
||||
};
|
||||
|
||||
class UnkObject1200 : public SavedObject {
|
||||
public:
|
||||
Rect _rect1;
|
||||
Rect _rect2;
|
||||
|
||||
int *_field16;
|
||||
int *_field3A;
|
||||
|
||||
int _field12;
|
||||
int _field14;
|
||||
int _field26;
|
||||
int _field28;
|
||||
int _field2A;
|
||||
int _field2C;
|
||||
int _field2E;
|
||||
int _field30;
|
||||
int _field32;
|
||||
int _field34;
|
||||
int _field36;
|
||||
int _field38;
|
||||
int _field3E;
|
||||
int _field40;
|
||||
|
||||
UnkObject1200();
|
||||
void synchronize(Serializer &s);
|
||||
|
||||
void sub51AE9(int arg1);
|
||||
int sub51AF8(Common::Point pt);
|
||||
bool sub51AFD(Common::Point pt);
|
||||
void sub51B02();
|
||||
void sub9EDE8(Rect rect);
|
||||
int sub9EE22(int &arg1, int &arg2);
|
||||
virtual Common::String getClassName() { return "UnkObject1200"; }
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
class AnimationSlice {
|
||||
|
@ -1136,7 +1136,7 @@ void Scene1200::postInit(SceneObjectList *OwnerList) {
|
||||
tmpRect.set(110, 20, 210, 120);
|
||||
_object1.sub9EDE8(tmpRect);
|
||||
|
||||
_object1.sub51AE9(1);
|
||||
_object1.load(1);
|
||||
_object1.sub51AFD(Common::Point(R2_GLOBALS._v56AA2, R2_GLOBALS._v56AA4));
|
||||
warning("int unk = set_pane_p(_paneNumber);");
|
||||
_object1.sub51B02();
|
||||
|
@ -147,7 +147,7 @@ public:
|
||||
NamedHotspot _item1;
|
||||
SceneActor _actor1;
|
||||
Area1 _area1;
|
||||
UnkObject1200 _object1;
|
||||
MazeUI _object1;
|
||||
SequenceManager _sequenceManager;
|
||||
|
||||
int _field412;
|
||||
|
@ -2888,6 +2888,7 @@ void Scene3400::signal() {
|
||||
* Scene 3500 -
|
||||
*
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
Scene3500::Action1::Action1() {
|
||||
_field1E = 0;
|
||||
_field20 = 0;
|
||||
@ -3046,16 +3047,16 @@ void Scene3500::Actor7::sub109693(Common::Point Pt) {
|
||||
}
|
||||
|
||||
int Scene3500::UnkObject3500::sub1097C9(int arg1) {
|
||||
return (_field2A / 2) + arg1 - (arg1 % _field2A);
|
||||
return (_width / 2) + arg1 - (arg1 % _width);
|
||||
}
|
||||
|
||||
int Scene3500::UnkObject3500::sub1097EF(int arg1) {
|
||||
return (_field2C / 2) + arg1 - (arg1 % _field2C);
|
||||
return (_height / 2) + arg1 - (arg1 % _height);
|
||||
}
|
||||
|
||||
int Scene3500::UnkObject3500::sub109C09(Common::Point pt) {
|
||||
int vx = pt.x / _field2A;
|
||||
int vy = pt.y / _field2C;
|
||||
int vx = pt.x / _width;
|
||||
int vy = pt.y / _height;
|
||||
|
||||
if ((vx >= 0) && (_field26 > vx) && (_field28 > vy)) {
|
||||
return _field16[((_field26 * vy) + vx) * 2];
|
||||
@ -3665,7 +3666,7 @@ void Scene3500::postInit(SceneObjectList *OwnerList) {
|
||||
|
||||
tmpRect.set(160, 89, 299, 182);
|
||||
_unkObj1.sub9EDE8(tmpRect);
|
||||
_unkObj1.sub51AE9(2);
|
||||
_unkObj1.load(2);
|
||||
_unkObj1.sub51AFD(Common::Point(_field127A, _field127C));
|
||||
|
||||
_action1._field24 = 0;
|
||||
@ -3787,6 +3788,7 @@ void Scene3500::process(Event &event) {
|
||||
void Scene3500::dispatch() {
|
||||
Rect tmpRect;
|
||||
Scene::dispatch();
|
||||
|
||||
if (((_actor1._frame % 2) == 0) && (_action1._field24 == 0)) {
|
||||
_actor1.setFrame(_actor1.changeFrame());
|
||||
_field1276 = _actor1._frame;
|
||||
|
@ -633,7 +633,7 @@ class Scene3500 : public SceneExt {
|
||||
// TODO: double check if nothing specific is present, then remove this class
|
||||
};
|
||||
|
||||
class UnkObject3500 : public UnkObject1200 {
|
||||
class UnkObject3500 : public MazeUI {
|
||||
public:
|
||||
int sub1097C9(int arg1);
|
||||
int sub1097EF(int arg1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user