aboutsummaryrefslogtreecommitdiff
path: root/scumm/akos.cpp
diff options
context:
space:
mode:
authorMax Horn2005-03-27 01:07:22 +0000
committerMax Horn2005-03-27 01:07:22 +0000
commitabcf7bf2de88c3926843fa3fd613e50f5ea63cd5 (patch)
treeac27f9a9639270ceff80adb478f19fba339ea9bc /scumm/akos.cpp
parent5bd26a52df502391714b539df30eb76e50c72cf7 (diff)
downloadscummvm-rg350-abcf7bf2de88c3926843fa3fd613e50f5ea63cd5.tar.gz
scummvm-rg350-abcf7bf2de88c3926843fa3fd613e50f5ea63cd5.tar.bz2
scummvm-rg350-abcf7bf2de88c3926843fa3fd613e50f5ea63cd5.zip
Tie the AKOS code into the new costume infrastructure, too
svn-id: r17259
Diffstat (limited to 'scumm/akos.cpp')
-rw-r--r--scumm/akos.cpp42
1 files changed, 23 insertions, 19 deletions
diff --git a/scumm/akos.cpp b/scumm/akos.cpp
index 28ef532c93..920141d4af 100644
--- a/scumm/akos.cpp
+++ b/scumm/akos.cpp
@@ -137,20 +137,21 @@ static bool akos_compare(int a, int b, byte cmd) {
}
}
-bool ScummEngine::akos_hasManyDirections(int costume) {
- byte *akos;
- const AkosHeader *akhd;
+void AkosCostumeLoader::loadCostume(int id) {
+ _akos = _vm->getResourceAddress(rtCostume, id);
+ assert(_akos);
+}
- akos = getResourceAddress(rtCostume, costume);
- assert(akos);
+bool AkosCostumeLoader::hasManyDirections() {
+ const AkosHeader *akhd;
- akhd = (const AkosHeader *)findResourceData(MKID('AKHD'), akos);
+ akhd = (const AkosHeader *)_vm->findResourceData(MKID('AKHD'), _akos);
return (akhd->flags & 2) != 0;
}
-void ScummEngine::akos_decodeData(Actor *a, int frame, uint usemask) {
+void AkosCostumeLoader::costumeDecodeData(Actor *a, int frame, uint usemask) {
uint anim;
- const byte *akos, *r;
+ const byte *r;
const AkosHeader *akhd;
uint offs;
int i;
@@ -161,20 +162,19 @@ void ScummEngine::akos_decodeData(Actor *a, int frame, uint usemask) {
if (a->_costume == 0)
return;
- if (_version >= 7 && akos_hasManyDirections(a->_costume))
+ loadCostume(a->_costume);
+
+ if (_vm->_version >= 7 && hasManyDirections())
anim = toSimpleDir(1, a->getFacing()) + frame * 8;
else
anim = newDirToOldDir(a->getFacing()) + frame * 4;
- akos = getResourceAddress(rtCostume, a->_costume);
- assert(akos);
-
- akhd = (const AkosHeader *)findResourceData(MKID('AKHD'), akos);
+ akhd = (const AkosHeader *)_vm->findResourceData(MKID('AKHD'), _akos);
if (anim >= READ_LE_UINT16(&akhd->num_anims))
return;
- r = findResourceData(MKID('AKCH'), akos);
+ r = _vm->findResourceData(MKID('AKCH'), _akos);
assert(r);
offs = READ_LE_UINT16(r + anim * sizeof(uint16));
@@ -182,8 +182,8 @@ void ScummEngine::akos_decodeData(Actor *a, int frame, uint usemask) {
return;
r += offs;
- const uint8 *akst = findResourceData(MKID('AKST'), akos);
- const uint8 *aksf = findResourceData(MKID('AKSF'), akos);
+ const uint8 *akst = _vm->findResourceData(MKID('AKST'), _akos);
+ const uint8 *aksf = _vm->findResourceData(MKID('AKSF'), _akos);
i = 0;
mask = READ_LE_UINT16(r); r += 2;
@@ -201,7 +201,7 @@ void ScummEngine::akos_decodeData(Actor *a, int frame, uint usemask) {
a->_cost.seq3[i] = 0;
if (akst) {
- int size = getResourceDataSize(akst) / 8;
+ int size = _vm->getResourceDataSize(akst) / 8;
if (size > 0) {
bool found = false;
while (size--) {
@@ -231,7 +231,7 @@ void ScummEngine::akos_decodeData(Actor *a, int frame, uint usemask) {
a->_cost.seq1[i] = 0;
a->_cost.seq2[i] = 0;
if (aksf) {
- int size = getResourceDataSize(aksf) / 6;
+ int size = _vm->getResourceDataSize(aksf) / 6;
if (size > 0) {
bool found = false;
while (size--) {
@@ -256,7 +256,7 @@ void ScummEngine::akos_decodeData(Actor *a, int frame, uint usemask) {
a->_cost.curpos[i] = start;
a->_cost.seq3[i] = 0;
if (akst) {
- int size = getResourceDataSize(akst) / 8;
+ int size = _vm->getResourceDataSize(akst) / 8;
if (size > 0) {
bool found = false;
while (size--) {
@@ -1239,6 +1239,10 @@ byte AkosRenderer::codec32(int xmoveCur, int ymoveCur) {
return 0;
}
+byte AkosCostumeLoader::increaseAnims(Actor *a) {
+ return _vm->akos_increaseAnims(_akos, a);
+}
+
bool ScummEngine::akos_increaseAnims(const byte *akos, Actor *a) {
const byte *aksq, *akfo;
int i;