mirror of
https://github.com/libretro/scummvm.git
synced 2025-05-13 09:36:21 +00:00
TSAGE: Starting to implement animation player needed for R2R Title Screen
This commit is contained in:
parent
0f3614b043
commit
7a54ba86a0
@ -373,6 +373,7 @@ public:
|
||||
|
||||
bool loadPalette(int paletteNum);
|
||||
void loadPalette(const byte *pSrc, int start, int count);
|
||||
void replace(const ScenePalette *src) { loadPalette(src->_palette, 0, 256); }
|
||||
void refresh();
|
||||
void setPalette(int index, int count);
|
||||
void getEntry(int index, uint *r, uint *g, uint *b);
|
||||
|
@ -1551,36 +1551,130 @@ void Scene1200::sub9DAD6(int indx) {
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
ActionObject::ActionObject(): EventHandler() {
|
||||
AnimationPlayer::AnimationPlayer(): EventHandler() {
|
||||
_endAction = NULL;
|
||||
|
||||
_fieldA = NULL;
|
||||
_field16 = NULL;
|
||||
|
||||
_screenBounds = R2_GLOBALS._gfxManagerInstance._bounds;
|
||||
_rect1 = R2_GLOBALS._gfxManagerInstance._bounds;
|
||||
_field3C = 0;
|
||||
_field3A = 1;
|
||||
_field5A = 0;
|
||||
_field58 = 0;
|
||||
_endAction = NULL;
|
||||
}
|
||||
|
||||
void ActionObject::synchronize(Serializer &s) {
|
||||
EventHandler::synchronize(s);
|
||||
|
||||
SYNC_POINTER(_endAction);
|
||||
AnimationPlayer::~AnimationPlayer() {
|
||||
if (!method3())
|
||||
method4();
|
||||
}
|
||||
|
||||
void ActionObject::remove() {
|
||||
void AnimationPlayer::synchronize(Serializer &s) {
|
||||
EventHandler::synchronize(s);
|
||||
warning("TODO AnimationPlayer::load");
|
||||
}
|
||||
|
||||
void AnimationPlayer::remove() {
|
||||
if (_endAction)
|
||||
_endAction->signal();
|
||||
|
||||
_endAction = NULL;
|
||||
}
|
||||
|
||||
bool ActionObject::load(int rlbNum, Action *endAction) {
|
||||
warning("TODO ActionOjbect::load");
|
||||
return true;
|
||||
void AnimationPlayer::process(Event &event) {
|
||||
if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE) &&
|
||||
(_field3A)) {
|
||||
_field90C = _field576;
|
||||
}
|
||||
}
|
||||
|
||||
void AnimationPlayer::dispatch() {
|
||||
uint32 gameFrame = R2_GLOBALS._events.getFrameNumber();
|
||||
uint32 gameDiff = (gameFrame > _gameFrame) ? gameFrame - _gameFrame : _gameFrame - gameFrame;
|
||||
|
||||
if (gameDiff >= _field910) {
|
||||
drawFrame(_field904 % _field57C);
|
||||
++_field904;
|
||||
_field90C = _field904 / _field57C;
|
||||
|
||||
if (_field90C == _field90E)
|
||||
method2();
|
||||
|
||||
_field908 = _field904;
|
||||
_gameFrame = gameFrame;
|
||||
}
|
||||
}
|
||||
|
||||
bool AnimationPlayer::load(int rlbNum, Action *endAction) {
|
||||
ResourceEntry resEntry;
|
||||
if (!g_resourceManager->first().getSectionEntry(_resourceFile, RES_IMAGE, rlbNum, 0, resEntry)) {
|
||||
warning("Couldn't find resource index");
|
||||
// TODO: Complete animation loading
|
||||
}
|
||||
|
||||
_resourceFile.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
void AnimationPlayer::drawFrame(int frameIndex) {
|
||||
uint32 v = READ_LE_UINT32(_dataP);
|
||||
warning("v = %d", v);
|
||||
//TODO
|
||||
|
||||
// End check
|
||||
if (_field56 == 42) {
|
||||
_screenBounds.expandPanes();
|
||||
|
||||
R2_GLOBALS._sceneObjects->draw();
|
||||
} else {
|
||||
if (R2_GLOBALS._sceneManager._hasPalette) {
|
||||
R2_GLOBALS._sceneManager._hasPalette = false;
|
||||
R2_GLOBALS._scenePalette.refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AnimationPlayer::method2() {
|
||||
|
||||
}
|
||||
|
||||
bool AnimationPlayer::method3() {
|
||||
return (_field90C >= _field576);
|
||||
}
|
||||
|
||||
void AnimationPlayer::method4() {
|
||||
if (_field38) {
|
||||
switch (_field3C) {
|
||||
case 0:
|
||||
R2_GLOBALS._scenePalette.replace(&_palette);
|
||||
changePane();
|
||||
R2_GLOBALS._sceneManager._hasPalette = true;
|
||||
break;
|
||||
case 2:
|
||||
proc14();
|
||||
break;
|
||||
default:
|
||||
changePane();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void ActionObjectExt::synchronize(Serializer &s) {
|
||||
ActionObject::synchronize(s);
|
||||
s.syncAsSint16LE(_v1);
|
||||
AnimationPlayerExt::AnimationPlayerExt(): AnimationPlayer() {
|
||||
_v = 0;
|
||||
_field3A = 0;
|
||||
}
|
||||
|
||||
|
||||
void AnimationPlayerExt::synchronize(Serializer &s) {
|
||||
AnimationPlayer::synchronize(s);
|
||||
s.syncAsSint16LE(_v);
|
||||
}
|
||||
|
||||
} // End of namespace Ringworld2
|
||||
|
||||
|
@ -325,29 +325,55 @@ public:
|
||||
virtual Common::String getClassName() { return "UnkObject1200"; }
|
||||
};
|
||||
|
||||
class ActionObject: public EventHandler {
|
||||
class AnimationPlayer: public EventHandler {
|
||||
public:
|
||||
EventHandler *_endAction;
|
||||
Common::File _resourceFile;
|
||||
void *_fieldA;
|
||||
void *_field16;
|
||||
|
||||
byte *_dataP;
|
||||
Rect _rect1, _screenBounds;
|
||||
int _field38;
|
||||
int _field3A, _field3C;
|
||||
int _field56;
|
||||
int _field58, _field5A;
|
||||
ScenePalette _palette;
|
||||
byte _palData[256 * 3];
|
||||
Action *_endAction;
|
||||
int _field576;
|
||||
int _field57C;
|
||||
int _palStart, _palSize;
|
||||
int _field904;
|
||||
int _field908;
|
||||
int _field90C;
|
||||
int _field90E;
|
||||
uint _field910;
|
||||
uint32 _gameFrame;
|
||||
public:
|
||||
ActionObject();
|
||||
AnimationPlayer();
|
||||
~AnimationPlayer();
|
||||
|
||||
virtual void synchronize(Serializer &s);
|
||||
virtual void remove();
|
||||
virtual void process(Event &event);
|
||||
virtual void dispatch();
|
||||
virtual void flipPane() {}
|
||||
virtual void changePane() {}
|
||||
virtual void proc14() {}
|
||||
|
||||
bool load(int rlbNum, Action *endAction = NULL);
|
||||
bool proc1() { return false; }
|
||||
void proc2() {}
|
||||
void drawFrame(int frameIndex);
|
||||
void method2();
|
||||
bool method3();
|
||||
void method4();
|
||||
void method5() {}
|
||||
};
|
||||
|
||||
class ActionObjectExt: public ActionObject {
|
||||
class AnimationPlayerExt: public AnimationPlayer {
|
||||
public:
|
||||
int _v1;
|
||||
int _v;
|
||||
public:
|
||||
AnimationPlayerExt();
|
||||
|
||||
virtual void synchronize(Serializer &s);
|
||||
};
|
||||
|
@ -1499,10 +1499,19 @@ Scene180::Scene180(): SceneExt(), _webbsterSpeaker(27) {
|
||||
|
||||
GfxFont font;
|
||||
font.setFontNumber(7);
|
||||
_fontHeight = font.getHeight();
|
||||
_fontHeight = font.getHeight() + 1;
|
||||
|
||||
_sceneMode = (R2_GLOBALS._sceneManager._previousScene == 205) ? 10 : 0;
|
||||
_gameTextSpeaker._displayMode = 9;
|
||||
}
|
||||
|
||||
void Scene180::postInit(SceneObjectList *OwnerList) {
|
||||
loadScene(9999);
|
||||
SceneExt::postInit();
|
||||
|
||||
R2_GLOBALS._uiElements._active = true;
|
||||
R2_GLOBALS._player.disableControl();
|
||||
|
||||
_stripManager.addSpeaker(&_gameTextSpeaker);
|
||||
_stripManager.addSpeaker(&_webbsterSpeaker);
|
||||
_stripManager.addSpeaker(&_tealSpeaker);
|
||||
@ -1511,15 +1520,6 @@ Scene180::Scene180(): SceneExt(), _webbsterSpeaker(27) {
|
||||
signal();
|
||||
}
|
||||
|
||||
void Scene180::postInit(SceneObjectList *OwnerList) {
|
||||
SceneExt::postInit();
|
||||
loadScene(9999);
|
||||
|
||||
R2_GLOBALS._player._uiEnabled = false;
|
||||
R2_GLOBALS._player.disableControl();
|
||||
|
||||
}
|
||||
|
||||
void Scene180::remove() {
|
||||
_stripManager._field2E8 = -1;
|
||||
// _stripManager._field2EA = -1;
|
||||
@ -1547,7 +1547,7 @@ void Scene180::synchronize(Serializer &s) {
|
||||
void Scene180::signal() {
|
||||
R2_GLOBALS._playStream.stop();
|
||||
|
||||
switch (_sceneMode) {
|
||||
switch (_sceneMode++) {
|
||||
case 0:
|
||||
setFrameInc(6);
|
||||
break;
|
||||
@ -1555,13 +1555,13 @@ void Scene180::signal() {
|
||||
case 1:
|
||||
_field412 = 1;
|
||||
R2_GLOBALS._sceneManager._hasPalette = true;
|
||||
_actionObject._field3C = 2;
|
||||
_actionObject._v1 = 1;
|
||||
_actionObject._field56 = 1;
|
||||
_animationPlayer._field3C = 2;
|
||||
_animationPlayer._v = 1;
|
||||
_animationPlayer._field56 = 1;
|
||||
R2_GLOBALS._scene180Mode = 1;
|
||||
|
||||
_actionObject.load(1, NULL);
|
||||
R2_GLOBALS._scenePalette.loadPalette(_actionObject._palData, 0, 256);
|
||||
_animationPlayer.load(1, NULL);
|
||||
R2_GLOBALS._scenePalette.loadPalette(_animationPlayer._palData, 0, 256);
|
||||
|
||||
R2_GLOBALS._sound1.play(1);
|
||||
break;
|
||||
@ -1598,14 +1598,14 @@ void Scene180::signal() {
|
||||
break;
|
||||
|
||||
case 5:
|
||||
_actionObject._field3C = 2;
|
||||
_actionObject._v1 = 1;
|
||||
_actionObject._field56 = 1;
|
||||
_animationPlayer._field3C = 2;
|
||||
_animationPlayer._v = 1;
|
||||
_animationPlayer._field56 = 1;
|
||||
R2_GLOBALS._scene180Mode = 2;
|
||||
_actionObject.load(2);
|
||||
_animationPlayer.load(2);
|
||||
|
||||
_field412 = 1;
|
||||
R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 6, NULL);
|
||||
R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 6, NULL);
|
||||
R2_GLOBALS._sound1.play(2);
|
||||
break;
|
||||
|
||||
@ -1701,11 +1701,11 @@ void Scene180::signal() {
|
||||
|
||||
case 29:
|
||||
_field412 = 1;
|
||||
_actionObject._field3C = 0;
|
||||
_actionObject._v1 = 1;
|
||||
_actionObject._field56 = 42;
|
||||
_animationPlayer._field3C = 0;
|
||||
_animationPlayer._v = 1;
|
||||
_animationPlayer._field56 = 42;
|
||||
R2_GLOBALS._scene180Mode = 3;
|
||||
_actionObject.load(3);
|
||||
_animationPlayer.load(3);
|
||||
break;
|
||||
|
||||
case 31:
|
||||
@ -1801,12 +1801,12 @@ void Scene180::signal() {
|
||||
break;
|
||||
|
||||
case 40:
|
||||
_actionObject._field3C = 2;
|
||||
_actionObject._field56 = 1;
|
||||
_animationPlayer._field3C = 2;
|
||||
_animationPlayer._field56 = 1;
|
||||
R2_GLOBALS._scene180Mode = 4;
|
||||
if (_actionObject.load(4)) {
|
||||
_actionObject.dispatch();
|
||||
R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 8, this);
|
||||
if (_animationPlayer.load(4)) {
|
||||
_animationPlayer.dispatch();
|
||||
R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 8, this);
|
||||
} else {
|
||||
_sceneMode = 43;
|
||||
setFrameInc(1);
|
||||
@ -1815,7 +1815,7 @@ void Scene180::signal() {
|
||||
|
||||
case 41:
|
||||
_field412 = 1;
|
||||
_actionObject._v1 = 1;
|
||||
_animationPlayer._v = 1;
|
||||
break;
|
||||
|
||||
case 42:
|
||||
@ -1834,19 +1834,19 @@ void Scene180::signal() {
|
||||
break;
|
||||
|
||||
case 45:
|
||||
R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 28, this);
|
||||
R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 28, this);
|
||||
break;
|
||||
|
||||
case 48:
|
||||
_field412 = 1;
|
||||
_actionObject._field3C = 2;
|
||||
_actionObject._v1 = 1;
|
||||
_actionObject._field56 = 1;
|
||||
_animationPlayer._field3C = 2;
|
||||
_animationPlayer._v = 1;
|
||||
_animationPlayer._field56 = 1;
|
||||
R2_GLOBALS._scene180Mode = 15;
|
||||
_actionObject.load(15, NULL);
|
||||
_animationPlayer.load(15, NULL);
|
||||
|
||||
R2_GLOBALS._sound1.play(9);
|
||||
R2_GLOBALS._scenePalette.addFader(_actionObject._palData, 256, 6, NULL);
|
||||
R2_GLOBALS._scenePalette.addFader(_animationPlayer._palData, 256, 6, NULL);
|
||||
break;
|
||||
|
||||
case 49:
|
||||
@ -1884,11 +1884,11 @@ void Scene180::process(Event &event) {
|
||||
|
||||
void Scene180::dispatch() {
|
||||
if (_frameInc) {
|
||||
uint32 frameNumber = R2_GLOBALS._events.getFrameNumber();
|
||||
uint32 gameFrame = R2_GLOBALS._events.getFrameNumber();
|
||||
|
||||
if (frameNumber >= (uint32)_frameNumber) {
|
||||
_frameInc = frameNumber - _frameNumber;
|
||||
_frameNumber = frameNumber;
|
||||
if (gameFrame >= (uint32)_frameNumber) {
|
||||
_frameInc -= gameFrame - _frameNumber;
|
||||
_frameNumber = gameFrame;
|
||||
|
||||
if (_frameInc <= 0) {
|
||||
_frameInc = 0;
|
||||
@ -1897,15 +1897,15 @@ void Scene180::dispatch() {
|
||||
}
|
||||
}
|
||||
|
||||
if (_actionObject._v1) {
|
||||
if (_actionObject.proc1()) {
|
||||
_actionObject._v1 = 0;
|
||||
_actionObject.proc2();
|
||||
_actionObject.remove();
|
||||
if (_animationPlayer._v) {
|
||||
if (_animationPlayer.method3()) {
|
||||
_animationPlayer._v = 0;
|
||||
_animationPlayer.method4();
|
||||
_animationPlayer.remove();
|
||||
|
||||
signal();
|
||||
} else {
|
||||
_actionObject.dispatch();
|
||||
_animationPlayer.dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -204,7 +204,7 @@ public:
|
||||
SceneActor _object1, _object2, _object3, _object4, _object5;
|
||||
ScenePalette _palette;
|
||||
SceneText _textList[20];
|
||||
ActionObjectExt _actionObject;
|
||||
AnimationPlayerExt _animationPlayer;
|
||||
SequenceManager _sequenceManager;
|
||||
Action1 _action1;
|
||||
ASoundExt _sound1;
|
||||
@ -287,7 +287,7 @@ private:
|
||||
int xMultiply, int yMultiply, int xCenter, int yCenter);
|
||||
void handleText();
|
||||
public:
|
||||
ActionObject _actionObject;
|
||||
AnimationPlayer _animationPlayer;
|
||||
int _fontHeight;
|
||||
SceneText _textList[15];
|
||||
Object *_objList1[3];
|
||||
|
Loading…
x
Reference in New Issue
Block a user