From fde5042601becd50a3aaa4db92faad97cacaa26f Mon Sep 17 00:00:00 2001 From: peres Date: Thu, 1 Jul 2021 18:57:45 +0900 Subject: [PATCH] PARALLACTION: implement BRA ferrcycle operator. The operator does a palette manipulation to simulate the movement of trees and railroad in part 3. --- engines/parallaction/callables_br.cpp | 35 ++++++++++++++++++++++++++- engines/parallaction/parallaction.h | 1 + 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/engines/parallaction/callables_br.cpp b/engines/parallaction/callables_br.cpp index ca60b8e5785..e09f7f49f29 100644 --- a/engines/parallaction/callables_br.cpp +++ b/engines/parallaction/callables_br.cpp @@ -38,8 +38,41 @@ void Parallaction_br::_c_resetpalette(void *) { warning("Parallaction_br::_c_resetpalette() not yet implemented"); } +/* + Used in part 3 by location ULTIMAVAG to + simulate the movement of trees and railroad. +*/ void Parallaction_br::_c_ferrcycle(void *) { - warning("Parallaction_br::_c_ferrcycle() not yet implemented"); + Palette pal = _gfx->_palette; + + if (_ferrcycleMode == 1) { + for (int i = 0; i < 16; ++i) { + pal.setEntry(4 * i + 192, 0, 0, 0); + pal.setEntry(4 * i + 193, 30, 12, 12); + pal.setEntry(4 * i + 194, 28, 47, 54); + pal.setEntry(4 * i + 195, 63, 63, 63); + } + } else if (_ferrcycleMode == 2) { + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < 4; ++j) { + pal.setEntry(j + 16 * i + 192, 0, 0, 0); + pal.setEntry(j + 16 * i + 196, 30, 12, 12); + pal.setEntry(j + 16 * i + 200, 28, 47, 54); + pal.setEntry(j + 16 * i + 204, 63, 63, 63); + } + } + } else if (_ferrcycleMode == 0) { + for (int i = 0; i < 16; ++i) { + pal.setEntry(i + 192, 0, 0, 0); + pal.setEntry(i + 208, 30, 12, 12); + pal.setEntry(i + 224, 28, 47, 54); + pal.setEntry(i + 240, 63, 63, 63); + } + } + + _gfx->setPalette(pal); + + _ferrcycleMode = (_ferrcycleMode + 1) % 3; } void Parallaction_br::_c_lipsinc(void *) { diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h index f0c134ce899..bafdfae307a 100644 --- a/engines/parallaction/parallaction.h +++ b/engines/parallaction/parallaction.h @@ -578,6 +578,7 @@ private: Common::String _followerName; AnimationPtr _follower; PathWalker_BR *_walker; + int _ferrcycleMode; // dos callables void _c_null(void *);