mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-22 01:39:57 +00:00
b47eb95316
svn-id: r25101
145 lines
3.3 KiB
C++
145 lines
3.3 KiB
C++
/* ScummVM - Scumm Interpreter
|
|
* Copyright (C) 2006 The ScummVM project
|
|
*
|
|
* Copyright (C) 1999-2001 Sarien Team
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* $URL$
|
|
* $Id$
|
|
*
|
|
*/
|
|
|
|
#include "common/stdafx.h"
|
|
|
|
#include "agi/agi.h"
|
|
#include "agi/opcodes.h"
|
|
|
|
namespace Agi {
|
|
|
|
#ifdef PATCH_LOGIC
|
|
|
|
#define ip (_game.logics[n].cIP)
|
|
#define code (_game.logics[n].data)
|
|
#define size (_game.logics[n].size)
|
|
|
|
/*
|
|
* Patches
|
|
*/
|
|
|
|
static const uint8 kq4dataFind[] = {
|
|
0x0C, 0x04, 0xFF, 0x07, 0x05, 0xFF, 0x15, 0x00,
|
|
0x03, 0x0A, 0x00, 0x77, 0x83, 0x71, 0x0D, 0x97,
|
|
0x03, 0x98, 0xCE, 0x18, 0x98, 0x19, 0x98, 0x1B,
|
|
0x98, 0x0C, 0x5A, 0x1A, 0x00
|
|
};
|
|
|
|
static const uint8 kq4dataFix[] = {
|
|
/* v19 = 0
|
|
* new.room(96)
|
|
* return
|
|
*/
|
|
0x03, 0x13, 0x0, 0x12, 0x60, 0x00
|
|
};
|
|
|
|
static const uint8 grdataFind[] = {
|
|
0x0C, 0x04, 0xFF, 0x07, 0x05, 0xFF, 0x16, 0x00,
|
|
0x0C, 0x96, 0x03, 0x0A, 0x00, 0x77, 0x83, 0x71,
|
|
0x0D, 0xD9, 0x03, 0xDC, 0xBF, 0x18, 0xDC, 0x19,
|
|
0xDC, 0x1B, 0xDC, 0x0C, 0x95, 0x1A
|
|
};
|
|
|
|
static const uint8 grdataFix[] = {
|
|
/* reset(227)
|
|
* v19 = 0
|
|
* v246 = 1
|
|
* set(15)
|
|
* new.room(73)
|
|
*/
|
|
0x0D, 0xE3, 0x03, 0x13, 0x00, 0x03, 0xF6, 0x01,
|
|
0x0C, 0x0F, 0x12, 0x49
|
|
};
|
|
|
|
#if 0
|
|
static const uint8 lsl1dataFind[] = {
|
|
0xFF, 0xFD, 0x07, 0x1E, 0xFC, 0x07, 0x6D, 0x01,
|
|
0x5F, 0x03, 0xFC, 0xFF, 0x12, 0x00, 0x0C, 0x6D,
|
|
0x78, 0x8A, 0x77, 0x69, 0x16, 0x18, 0x00, 0x0D,
|
|
0x30, 0x0D, 0x55, 0x78, 0x65, 0x0A
|
|
};
|
|
|
|
static const uint8 lsl1dataFix[] = {
|
|
/* set(109)
|
|
* reset(48)
|
|
* reset(85)
|
|
* accept.input()
|
|
* new.room(11)
|
|
*/
|
|
0x0C, 0x6D, 0x0D, 0x30, 0x0D, 0x55, 0x78, 0x12,
|
|
0x0B
|
|
};
|
|
#endif
|
|
|
|
static const uint8 mh1dataFind[] = {
|
|
0xFF, 0x07, 0x05, 0xFF, 0xE6, 0x00,
|
|
0x03, 0x0A, 0x02, 0x77, 0x83, 0x71,
|
|
0x6F, 0x01, 0x17, 0x00, 0x03, 0x00,
|
|
0x9F, 0x03, 0x37, 0x00, 0x03, 0x32,
|
|
0x03, 0x03, 0x3B, 0x00, 0x6C, 0x03
|
|
};
|
|
|
|
static const uint8 mh1dataFix[] = {
|
|
0x0C, 0x05, 0x16, 0x5A, 0x12, 0x99
|
|
};
|
|
|
|
void AgiEngine::patchLogic(int n) {
|
|
switch (n) {
|
|
#if 0
|
|
/* ALT-X in the questions takes care of that */
|
|
case 6:
|
|
/* lsl1 bypass questions */
|
|
if (!strcmp(_game.id, "LLLLL")) {
|
|
if (!memcmp(lsl1dataFind, (code + ip), 30))
|
|
memmove((code + ip), lsl1dataFix, 9);
|
|
}
|
|
break;
|
|
#endif
|
|
case 125:
|
|
/* gold rush code break */
|
|
if (!strcmp(_game.id, "GR")) {
|
|
if (!memcmp(grdataFind, (code + ip), 30))
|
|
memmove((code + ip), grdataFix, 12);
|
|
}
|
|
break;
|
|
case 140:
|
|
/* kings quest 4 code break */
|
|
if (!strcmp(_game.id, "KQ4")) {
|
|
if (memcmp(kq4dataFind, (code + ip), 29) == 0)
|
|
memmove((code + ip), kq4dataFix, 6);
|
|
}
|
|
break;
|
|
case 159:
|
|
/* manhunter 1 amiga */
|
|
if (ip + 30 < size && !memcmp(mh1dataFind, (code + ip), 30)) {
|
|
memmove((code + ip), mh1dataFix, 6);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
} // End of namespace Agi
|