mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-16 22:58:09 +00:00
DRAGONS: Replaced max scale with define
This commit is contained in:
parent
5e2a7a6882
commit
8c9a0cf1bb
@ -31,7 +31,6 @@ class ActorResource;
|
||||
struct ActorFrame;
|
||||
|
||||
#define DRAGONS_ENGINE_NUM_ACTORS 64
|
||||
#define DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE 256
|
||||
|
||||
enum ActorFlags {
|
||||
ACTOR_FLAG_1 = 1,
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "graphics/screen.h"
|
||||
#include "common/endian.h"
|
||||
#include "background.h"
|
||||
#include "screen.h"
|
||||
|
||||
namespace Dragons {
|
||||
|
||||
@ -286,10 +287,6 @@ Common::Point Background::getLayerOffset(uint8 layerNumber) {
|
||||
return layerOffset[layerNumber];
|
||||
}
|
||||
|
||||
int16 Background::getScale(int16 y) {
|
||||
return _scaleLayer.getScale(y);
|
||||
}
|
||||
|
||||
BackgroundResourceLoader::BackgroundResourceLoader(BigfileArchive *bigFileArchive, DragonRMS *dragonRMS) : _bigFileArchive(
|
||||
bigFileArchive), _dragonRMS(dragonRMS) {}
|
||||
|
||||
@ -394,4 +391,38 @@ uint16 ScaleLayer::getScale(uint16 y) {
|
||||
return uVar1 & 0xfff8u;
|
||||
}
|
||||
|
||||
ScaleLayer::ScaleLayer(): _savedBands(NULL) {
|
||||
for (int i = 0; i < 32; i++) {
|
||||
_bands[i]._y = -1;
|
||||
_bands[i]._priority = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
}
|
||||
}
|
||||
|
||||
ScaleLayer::~ScaleLayer() {
|
||||
delete _savedBands;
|
||||
}
|
||||
|
||||
void ScaleLayer::backup() {
|
||||
delete _savedBands;
|
||||
_savedBands = new ScaleBand[32];
|
||||
memcpy(_savedBands, _bands, sizeof(_bands));
|
||||
}
|
||||
|
||||
void ScaleLayer::restore() {
|
||||
assert(_savedBands);
|
||||
memcpy(_bands, _savedBands, sizeof(_bands));
|
||||
}
|
||||
|
||||
void ScaleLayer::clearAll() {
|
||||
for (int i = 0; i < 32; i++) {
|
||||
_bands[i]._y = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void ScaleLayer::setValue(uint8 index, int16 y, int16 value) {
|
||||
assert(index < 32);
|
||||
_bands[index]._y = y;
|
||||
_bands[index]._priority = value;
|
||||
}
|
||||
|
||||
} // End of namespace Dragons
|
||||
|
@ -50,11 +50,18 @@ typedef struct {
|
||||
|
||||
class ScaleLayer {
|
||||
public:
|
||||
ScaleLayer();
|
||||
~ScaleLayer();
|
||||
void load(Common::SeekableReadStream &stream);
|
||||
uint16 getScale(uint16 y);
|
||||
void backup();
|
||||
void restore();
|
||||
void clearAll();
|
||||
void setValue(uint8 index, int16 y, int16 value);
|
||||
|
||||
private:
|
||||
ScaleBand _bands[32];
|
||||
ScaleBand *_savedBands;
|
||||
};
|
||||
|
||||
struct TileMap {
|
||||
@ -106,7 +113,7 @@ public:
|
||||
void setPalette(byte *newPalette);
|
||||
void setLayerOffset(uint8 layerNumber, Common::Point offset);
|
||||
Common::Point getLayerOffset(uint8 layerNumber);
|
||||
int16 getScale(int16 y);
|
||||
ScaleLayer *getScaleLayer() { return &_scaleLayer; }
|
||||
private:
|
||||
Common::Point *loadPoints(Common::SeekableReadStream &stream);
|
||||
Graphics::Surface *initGfxLayer(TileMap &tileMap);
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "inventory.h"
|
||||
#include "scene.h"
|
||||
#include "scriptopcodes.h"
|
||||
#include "dragons/screen.h"
|
||||
|
||||
namespace Dragons {
|
||||
|
||||
@ -43,7 +44,7 @@ void Cursor::init(ActorManager *actorManager, DragonINIResource *dragonINIResour
|
||||
_actor->y_pos = _y = 100;
|
||||
_actor->priorityLayer = 6;
|
||||
_actor->flags = 0;
|
||||
_actor->scale = 0x100;
|
||||
_actor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
_actor->updateSequence(_sequenceID);
|
||||
_actor->flags |= (Dragons::ACTOR_FLAG_40 | Dragons::ACTOR_FLAG_80 | Dragons::ACTOR_FLAG_100 |
|
||||
Dragons::ACTOR_FLAG_200);
|
||||
|
@ -567,7 +567,7 @@ void DragonsEngine::gameLoop()
|
||||
if (tmpId != 0) {
|
||||
actor->flags = 0;
|
||||
actor->priorityLayer = 0;
|
||||
actor->scale = 0x100;
|
||||
actor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
actor->updateSequence(getINI(tmpId - 1)->field_8 * 2 + 10);
|
||||
actor->setFlag(ACTOR_FLAG_40);
|
||||
actor->setFlag(ACTOR_FLAG_80);
|
||||
@ -584,7 +584,7 @@ void DragonsEngine::gameLoop()
|
||||
Actor *invActor = _inventory->getInventoryItemActor(_cursor->iniItemInHand);
|
||||
invActor->flags = 0;
|
||||
invActor->priorityLayer = 0;
|
||||
invActor->scale = 0x100;
|
||||
invActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
invActor->updateSequence(
|
||||
getINI(_cursor->iniItemInHand - 1)->field_8 * 2 + 10);
|
||||
_cursor->iniItemInHand = 0;
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "bag.h"
|
||||
#include "scene.h"
|
||||
#include "talk.h"
|
||||
#include "dragons/screen.h"
|
||||
|
||||
namespace Dragons {
|
||||
|
||||
@ -81,7 +82,7 @@ void Inventory::init(ActorManager *actorManager, BackgroundResourceLoader *backg
|
||||
_actor->y_pos = 0;
|
||||
_actor->priorityLayer = 6;
|
||||
_actor->flags = 0;
|
||||
_actor->scale = 0x100;
|
||||
_actor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
_actor->updateSequence(0);
|
||||
_actor->flags |= (Dragons::ACTOR_FLAG_40 | Dragons::ACTOR_FLAG_80 | Dragons::ACTOR_FLAG_100 |
|
||||
Dragons::ACTOR_FLAG_200);
|
||||
@ -174,7 +175,7 @@ void Inventory::openInventory() {
|
||||
|
||||
if (inventoryItemTbl[i]) {
|
||||
item->flags = 0; //clear all flags
|
||||
item->scale = 0x100;
|
||||
item->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
item->priorityLayer = 0;
|
||||
item->updateSequence(_vm->getINI(inventoryItemTbl[i] - 1)->field_8 * 2 + 10);
|
||||
item->setFlag(ACTOR_FLAG_200);
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "dragons.h"
|
||||
#include "dragons/dragonini.h"
|
||||
#include "dragons/talk.h"
|
||||
#include "dragons/screen.h"
|
||||
|
||||
namespace Dragons {
|
||||
|
||||
@ -174,7 +175,7 @@ void Minigame1::run() {
|
||||
_vm->_dragonINIResource->setFlickerRecord(_vm->getINI(DAT_80063a40 - 1));
|
||||
flickerActor = _vm->getINI(DAT_80063a40 - 1)->actor;
|
||||
flickerActor->flags = flickerActor->flags | 0x380;
|
||||
flickerActor->scale = 0x100;
|
||||
flickerActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
flickerActor->priorityLayer = 4;
|
||||
flickerActor->_sequenceID2 = -1;
|
||||
flickerActor->updateSequence(0x15);
|
||||
@ -191,14 +192,14 @@ void Minigame1::run() {
|
||||
pusherActor->flags = pusherActor->flags | 0x380;
|
||||
pusherActor->x_pos = flickerActor->x_pos + -0xe;
|
||||
pusherActor->y_pos = flickerActor->y_pos + 7;
|
||||
pusherActor->scale = 0x100;
|
||||
pusherActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
pusherActor->priorityLayer = 6;
|
||||
wheelsActor = _vm->_actorManager->loadActor(7,0x11,0,0);
|
||||
// if (wheelsActorId == -1) {
|
||||
// ProbablyShowASCIIMessage(s_couldn't_alloc_wheels_8008e96c,2,4,0,0xffffffff);
|
||||
// }
|
||||
wheelsActor->flags = wheelsActor->flags | 0x380;
|
||||
wheelsActor->scale = 0x100;
|
||||
wheelsActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
wheelsActor->x_pos = flickerActor->x_pos;
|
||||
wheelsActor->y_pos = flickerActor->y_pos;
|
||||
wheelsActor->priorityLayer = 5;
|
||||
@ -209,7 +210,7 @@ void Minigame1::run() {
|
||||
// ProbablyShowASCIIMessage(s_couldn't_alloc-cat_8008e984,2,4,0,0xffffffff);
|
||||
// }
|
||||
catActor->flags = catActor->flags | 0x380;
|
||||
catActor->scale = 0x100;
|
||||
catActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
catActor->priorityLayer = 0;
|
||||
i = 0;
|
||||
while (i < 3) {
|
||||
@ -218,7 +219,7 @@ void Minigame1::run() {
|
||||
// ProbablyShowASCIIMessage(s_couldn't_alloc_target!_8008e998,2,4,0,0xffffffff);
|
||||
// }
|
||||
targetActorIdTbl[(uint)i + 1]->flags = targetActorIdTbl[(uint)i + 1]->flags | 0x380;
|
||||
targetActorIdTbl[(uint)i + 1]->scale = 0x100;
|
||||
targetActorIdTbl[(uint)i + 1]->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
auStack378[(uint)i] = 0;
|
||||
//TODO FUN_80017010_update_actor_texture_maybe(1);
|
||||
i = i + 1;
|
||||
@ -233,7 +234,7 @@ void Minigame1::run() {
|
||||
// ProbablyShowASCIIMessage(s_couldn't_alloc_dust_sprite!_8008e9b0,2,5,0,0xffffffff);
|
||||
// }
|
||||
dustSpriteActor->flags = dustSpriteActor->flags | 0x380;
|
||||
dustSpriteActor->scale = 0x100;
|
||||
dustSpriteActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
uVar1 = _vm->getINI(DAT_80063a48 - 1)->actor; //dragon_ini_pointer[DAT_80063a48 + -1].actorId;
|
||||
local_21e = 0;
|
||||
actorFieldC = uVar1->field_c;
|
||||
@ -382,7 +383,7 @@ void Minigame1::run() {
|
||||
local_23a = (local_25a + 3) * 0x80;
|
||||
catActor->y_pos = 0x5a;
|
||||
catFieldE_scaleMaybe = 0x100;
|
||||
catActor->scale = 0x100;
|
||||
catActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
catActor->updateSequence(0xc);
|
||||
_vm->playOrStopSound(5);
|
||||
catActor->priorityLayer = 3;
|
||||
@ -586,7 +587,7 @@ void Minigame1::run() {
|
||||
else {
|
||||
if ((int)(uint)(local_240 >> 7) < (int)((uint)flickerXPos - 0x32)) {
|
||||
if (catActor->_sequenceID != 9) {
|
||||
catActor->scale = 0x100;
|
||||
catActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
catActor->updateSequence(9);
|
||||
}
|
||||
local_240 = local_240 + 0x180;
|
||||
@ -595,7 +596,7 @@ void Minigame1::run() {
|
||||
else {
|
||||
if ((uint)flickerXPos + 0x32 < (uint)(local_240 >> 7)) {
|
||||
if (catActor->_sequenceID != 10) {
|
||||
catActor->scale = 0x100;
|
||||
catActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
catActor->updateSequence(10);
|
||||
}
|
||||
local_240 = local_240 - 0x180;
|
||||
|
@ -222,7 +222,7 @@ void Minigame3::run() {
|
||||
error("Couldn't alloc tear");
|
||||
}
|
||||
tearActorTbl[(int16)i]->flags = tearActorTbl[(int16)i]->flags | 0x380;
|
||||
tearActorTbl[(int16)i]->scale = 0x100;
|
||||
tearActorTbl[(int16)i]->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
tearActorTbl[(int16)i]->priorityLayer = 0;
|
||||
local_208[(int16)i] = -1;
|
||||
local_208[(int)(int16)i + 8] = 0;
|
||||
@ -240,7 +240,7 @@ void Minigame3::run() {
|
||||
handActorId->setFlag(ACTOR_FLAG_800);
|
||||
handActorId->setFlag(ACTOR_FLAG_2000);
|
||||
handActorId->setFlag(ACTOR_FLAG_4000);
|
||||
handActorId->scale = 0x100;
|
||||
handActorId->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
handActorId->priorityLayer = 0;
|
||||
handActorId->field_7c = 0x40000;
|
||||
i = 0;
|
||||
@ -250,7 +250,7 @@ void Minigame3::run() {
|
||||
error("Couldn't alloc tear blink");
|
||||
}
|
||||
tearBlinkActorTbl[(int16)i]->flags = tearBlinkActorTbl[(int16)i]->flags | 0x4384;
|
||||
tearBlinkActorTbl[(int16)i]->scale = 0x100;
|
||||
tearBlinkActorTbl[(int16)i]->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
tearBlinkActorTbl[(int16)i]->priorityLayer = 0;
|
||||
i = i + 1;
|
||||
}
|
||||
@ -262,7 +262,7 @@ void Minigame3::run() {
|
||||
}
|
||||
tearBlinkActorTbl2[(int16)i]->setFlag(ACTOR_FLAG_100);
|
||||
tearBlinkActorTbl2[(int16)i]->setFlag(ACTOR_FLAG_800);
|
||||
tearBlinkActorTbl2[(int16)i]->scale = 0x100;
|
||||
tearBlinkActorTbl2[(int16)i]->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
tearBlinkActorTbl2[(int16)i]->priorityLayer = 0;
|
||||
i = i + 1;
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "dragons/dragonini.h"
|
||||
#include "dragons/talk.h"
|
||||
#include "dragons/scene.h"
|
||||
#include "dragons/screen.h"
|
||||
|
||||
namespace Dragons {
|
||||
|
||||
@ -52,7 +53,7 @@ void Minigame5::run() {
|
||||
uint16 local_76;
|
||||
ushort local_74;
|
||||
ushort local_72;
|
||||
ushort local_70;
|
||||
ushort bombScale;
|
||||
Actor *bombActor;
|
||||
Actor *flickerActor;
|
||||
Actor *pusherActor;
|
||||
@ -107,7 +108,7 @@ void Minigame5::run() {
|
||||
_vm->_dragonINIResource->setFlickerRecord(_vm->_dragonINIResource->getRecord(DAT_80063a40 - 1));
|
||||
flickerActor = _vm->_dragonINIResource->getFlickerRecord()->actor;
|
||||
flickerActor->flags = flickerActor->flags | 0x380;
|
||||
flickerActor->scale = 0x100;
|
||||
flickerActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
flickerActor->priorityLayer = 4;
|
||||
flickerActor->_sequenceID2 = -1;
|
||||
flickerActor->updateSequence(0x19);
|
||||
@ -126,7 +127,7 @@ void Minigame5::run() {
|
||||
pusherActor->flags = pusherActor->flags | 0x380;
|
||||
pusherActor->x_pos = flickerActor->x_pos + -0xe;
|
||||
pusherActor->y_pos = flickerActor->y_pos + 7;
|
||||
pusherActor->scale = 0x100;
|
||||
pusherActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
pusherActor->priorityLayer = 6;
|
||||
// DisableVSyncEvent();
|
||||
wheelsActor = _vm->_actorManager->loadActor(7,0x11,0,0);
|
||||
@ -135,7 +136,7 @@ void Minigame5::run() {
|
||||
error("Couldn't alloc wheels!");
|
||||
}
|
||||
wheelsActor->flags = wheelsActor->flags | 0x380;
|
||||
wheelsActor->scale = 0x100;
|
||||
wheelsActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
wheelsActor->x_pos = flickerActor->x_pos;
|
||||
wheelsActor->y_pos = flickerActor->y_pos;
|
||||
wheelsActor->priorityLayer = 5;
|
||||
@ -148,7 +149,7 @@ void Minigame5::run() {
|
||||
error("Couldn't alloc bomb!");
|
||||
}
|
||||
bombActor->flags = bombActor->flags | 0x380;
|
||||
bombActor->scale = 0x100;
|
||||
bombActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
bombActor->priorityLayer = 0;
|
||||
// DisableVSyncEvent();
|
||||
dustActor = _vm->_actorManager->loadActor(8,8,100,100,0);
|
||||
@ -157,7 +158,7 @@ void Minigame5::run() {
|
||||
error("Couldn't alloc dust sprite!");
|
||||
}
|
||||
dustActor->flags = dustActor->flags | 0x380;
|
||||
dustActor->scale = 0x100;
|
||||
dustActor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
local_4e = _vm->_dragonINIResource->getRecord(DAT_80063a48 + -1)->actor;
|
||||
local_4c = 0;
|
||||
local_4a = local_4e->field_c;
|
||||
@ -279,8 +280,8 @@ void Minigame5::run() {
|
||||
local_5e = 0x2d00;
|
||||
local_5a = (local_72 + 3) * 0x80;
|
||||
bombActor->y_pos = 0x5a;
|
||||
local_70 = 0x100;
|
||||
bombActor->scale = 0x100;
|
||||
bombScale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
bombActor->scale = bombScale;
|
||||
_vm->playOrStopSound(10);
|
||||
bombActor->priorityLayer = 3;
|
||||
flickerActor->updateSequence(8);
|
||||
@ -294,7 +295,7 @@ void Minigame5::run() {
|
||||
break;
|
||||
case 3:
|
||||
local_60 = local_60 + local_5c;
|
||||
if ((uint)local_72 * 2 + 0xb4 < (uint)local_70) {
|
||||
if ((uint)local_72 * 2 + 0xb4 < (uint)bombScale) {
|
||||
local_5e = local_5e - local_5a;
|
||||
local_5a = local_5a - local_28[((uint)local_72 - 1) * 3];
|
||||
if (local_5a < 0) {
|
||||
@ -302,7 +303,7 @@ void Minigame5::run() {
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((int)(uint)local_70 < (int)((uint)local_72 * -4 + 0xba)) {
|
||||
if ((int)(uint)bombScale < (int)((uint)local_72 * -4 + 0xba)) {
|
||||
local_5e = local_5e + local_5a;
|
||||
local_5a = local_5a + local_28[((uint)local_72 - 1) * 3 + 2];
|
||||
}
|
||||
@ -312,9 +313,9 @@ void Minigame5::run() {
|
||||
}
|
||||
bombActor->x_pos = local_60 >> 7;
|
||||
bombActor->y_pos = local_5e >> 7;
|
||||
local_70 = local_70 - 3;
|
||||
bombActor->scale = local_70;
|
||||
if (local_70 == 0x7f) {
|
||||
bombScale = bombScale - 3;
|
||||
bombActor->scale = bombScale;
|
||||
if (bombScale == 0x7f) {
|
||||
if (((local_60 >> 7 < local_30[0]) || (local_30[1] < local_60 >> 7)) ||
|
||||
(local_72 != local_30[2])) {
|
||||
local_42 = 8;
|
||||
@ -346,13 +347,13 @@ void Minigame5::run() {
|
||||
currentState = 8;
|
||||
}
|
||||
}
|
||||
if (local_70 < 0x7f) {
|
||||
if (bombScale < 0x7f) {
|
||||
bombActor->priorityLayer = 2;
|
||||
}
|
||||
if ((0xc < local_70) && (local_70 < 0x41)) {
|
||||
if ((0xc < bombScale) && (bombScale < 0x41)) {
|
||||
bombActor->priorityLayer = 0;
|
||||
}
|
||||
if ((short)local_70 < 2) {
|
||||
if ((short)bombScale < 2) {
|
||||
currentState = 5;
|
||||
}
|
||||
break;
|
||||
|
@ -370,7 +370,7 @@ void Scene::draw() {
|
||||
Graphics::Surface *s = actor->surface;
|
||||
if (actor->priorityLayer == priority) { //} && x + s->w < 320 && y + s->h < 200) {
|
||||
if (!actor->isFlagSet(ACTOR_FLAG_80)) {
|
||||
actor->scale = _stage->getScale(actor->y_pos);
|
||||
actor->scale = _stage->getScaleLayer()->getScale(actor->y_pos);
|
||||
}
|
||||
int x = actor->x_pos - (actor->frame->xOffset * actor->scale / DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE) - (actor->isFlagSet(ACTOR_FLAG_200) ? 0 : _camera.x);
|
||||
int y = actor->y_pos - (actor->frame->yOffset * actor->scale / DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE) - (actor->isFlagSet(ACTOR_FLAG_200) ? 0 : _camera.y);
|
||||
@ -515,4 +515,8 @@ void Scene::drawBgLayer(uint8 layerNumber, Common::Rect rect, Graphics::Surface
|
||||
_screen->copyRectToSurface8bpp(*surface, _screen->getPalette(0), 0, 0, rect, false, 128);
|
||||
}
|
||||
|
||||
ScaleLayer *Scene::getScaleLayer() {
|
||||
return _stage->getScaleLayer();
|
||||
}
|
||||
|
||||
} // End of namespace Dragons
|
||||
|
@ -37,6 +37,7 @@ class DragonINIResource;
|
||||
class BigfileArchive;
|
||||
class Screen;
|
||||
class ScriptOpcodes;
|
||||
class ScaleLayer;
|
||||
struct DragonINI;
|
||||
|
||||
class Scene {
|
||||
@ -83,6 +84,7 @@ public:
|
||||
|
||||
void setLayerOffset(uint8 layerNumber, Common::Point offset);
|
||||
Common::Point getLayerOffset(uint8 layerNumber);
|
||||
ScaleLayer *getScaleLayer();
|
||||
private:
|
||||
void resetActorFrameFlags();
|
||||
void drawActorNumber(int16 x, int16 y, uint16 actorId);
|
||||
|
@ -168,7 +168,9 @@ void Screen::copyRectToSurface8bpp(const void *buffer, byte* palette, int srcPit
|
||||
void Screen::drawScaledSprite(Graphics::Surface *destSurface, byte *source, int sourceWidth, int sourceHeight,
|
||||
int destX, int destY, int destWidth, int destHeight, byte *palette, bool flipX, uint8 alpha) {
|
||||
// Based on the GNAP engine scaling code
|
||||
// TODO Implement flipping
|
||||
if (destWidth == 0 || destHeight == 0) {
|
||||
return;
|
||||
}
|
||||
const int xs = ((sourceWidth - 1) << 16) / destWidth;
|
||||
const int ys = ((sourceHeight -1) << 16) / destHeight;
|
||||
int clipX = 0, clipY = 0;
|
||||
|
@ -42,7 +42,7 @@ public:
|
||||
Graphics::PixelFormat getPixelFormat() { return _pixelFormat; }
|
||||
void copyRectToSurface(const Graphics::Surface &srcSurface, int destX, int destY);
|
||||
void copyRectToSurface(const Graphics::Surface &srcSurface, int destX, int destY, Common::Rect srcRect, bool flipX = false, uint8 alpha = 255);
|
||||
void copyRectToSurface8bpp(const Graphics::Surface &srcSurface, byte *palette, int destX, int destY, Common::Rect srcRect, bool flipX = false, uint8 alpha = 255, uint16 scale = 0x100);
|
||||
void copyRectToSurface8bpp(const Graphics::Surface &srcSurface, byte *palette, int destX, int destY, Common::Rect srcRect, bool flipX = false, uint8 alpha = 255, uint16 scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE);
|
||||
void updateScreen();
|
||||
void loadPalette(uint16 paletteNum, byte *palette);
|
||||
byte *getPalette(uint16 paletteNum);
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "dragons/actor.h"
|
||||
#include "dragons/sound.h"
|
||||
#include "dragons/talk.h"
|
||||
#include "dragons/screen.h"
|
||||
#include "scriptopcodes.h"
|
||||
|
||||
|
||||
@ -933,7 +934,7 @@ void ScriptOpcodes::opCode_UnkA_setsProperty(ScriptOpCall &scriptOpCall) {
|
||||
if (field2 == 0x1a && ini->field_1a_flags_maybe & 1 && ini->sceneId == _vm->getCurrentSceneId()) {
|
||||
if (s1 & 2) {
|
||||
ini->actor->flags |= Dragons::ACTOR_FLAG_80;
|
||||
ini->actor->scale = 0x100;
|
||||
ini->actor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
} else {
|
||||
ini->actor->flags &= ~Dragons::ACTOR_FLAG_80;
|
||||
}
|
||||
@ -1232,7 +1233,7 @@ void ScriptOpcodes::opCode_Unk7(ScriptOpCall &scriptOpCall) {
|
||||
Actor *actor = _vm->_inventory->getInventoryItemActor(_vm->_cursor->iniItemInHand);
|
||||
actor->flags = 0;
|
||||
actor->priorityLayer = 0;
|
||||
actor->scale = 0x100;
|
||||
actor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
actor->updateSequence((_vm->getINI(_vm->_cursor->iniItemInHand - 1)->field_8 * 2 + 10) & 0xfffe);
|
||||
actor->setFlag(ACTOR_FLAG_40);
|
||||
actor->setFlag(ACTOR_FLAG_80);
|
||||
|
@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
#include "dragons/actorresource.h"
|
||||
#include "dragons/background.h"
|
||||
#include "dragons/cursor.h"
|
||||
#include "dragons/cutscene.h"
|
||||
#include "dragons/credits.h"
|
||||
@ -410,7 +411,7 @@ void SpecialOpcodes::spcStGeorgeDragonLanded() {
|
||||
origActor->reset_maybe();
|
||||
// reset_actor_maybe();
|
||||
ini121->actor->setFlag(ACTOR_FLAG_80);
|
||||
ini121->actor->scale = 0x100;
|
||||
ini121->actor->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
ini121->actor->priorityLayer = 2;
|
||||
ini121->actorResourceId = 0x48;
|
||||
|
||||
@ -497,15 +498,16 @@ void SpecialOpcodes::spcStopFlameBedroomEscapeSceneLogic() {
|
||||
}
|
||||
|
||||
void SpecialOpcodes::spcCastleMoatFull() {
|
||||
//TODO
|
||||
_vm->_scene->getScaleLayer()->backup();
|
||||
}
|
||||
|
||||
void SpecialOpcodes::spcCastleRestoreScalePoints() {
|
||||
//TODO spcCastleRestoreScalePoints
|
||||
_vm->_scene->getScaleLayer()->restore();
|
||||
}
|
||||
|
||||
void SpecialOpcodes::spcCastleMoatUpdateActorSceneScalePoints() {
|
||||
//TODO
|
||||
_vm->_scene->getScaleLayer()->clearAll();
|
||||
_vm->_scene->getScaleLayer()->setValue(0, 199, 7);
|
||||
}
|
||||
|
||||
void SpecialOpcodes::spcCastleGateMoatDrainedSceneLogic() {
|
||||
@ -514,7 +516,7 @@ void SpecialOpcodes::spcCastleGateMoatDrainedSceneLogic() {
|
||||
void SpecialOpcodes::spcUnk34() {
|
||||
Actor *flicker = _vm->_dragonINIResource->getFlickerRecord()->actor;
|
||||
flicker->setFlag(ACTOR_FLAG_80);
|
||||
flicker->scale = 0x100;
|
||||
flicker->scale = DRAGONS_ENGINE_SPRITE_100_PERCENT_SCALE;
|
||||
}
|
||||
|
||||
void SpecialOpcodes::spcFlickerClearFlag0x80() {
|
||||
|
Loading…
Reference in New Issue
Block a user