// ********************************************************* // This collection of code is a translation of the // 'Create New Adventure' function. It reads an // old Dungeon Master or Prison save file and creates // a new Chaos Strikes Back save file. // ********************************************************* #include "stdafx.h" #include "Objects.h" #include "Dispatch.h" #include "UI.h" #include "CSB.h" #include #define CHAOSFILL(a,b) i8 fill##a[a-b]; //extern bool ForcedScreenDraw; extern i32 keyboardMode; #pragma pack(1) void _CALL0(GAMESTATE s); void _CALL1(GAMESTATE s,i32 a); void _CALL2(GAMESTATE s,i32 a,i32 b); void _CALL3(GAMESTATE s,i32 a,i32 b,i32); void _CALL4(GAMESTATE s,i32 a,i32 b,i32 c,i32 d); void _CALL5(GAMESTATE s,i32 a,i32 b,i32 c,i32 d,i32 e); void _CALL6(GAMESTATE s,i32 a,i32 b,i32 c,i32 d,i32 e,i32 f); void _CALL7(GAMESTATE s,i32 a,i32 b,i32 c,i32 d,i32 e,i32 f,i32 g); void _CALL8(GAMESTATE s,i32 a,i32 b,i32 c,i32 d,i32 e,i32 f,i32 g,i32 h); void _CALL9(GAMESTATE s,i32 a,i32 b,i32 c,i32 d,i32 e,i32 f,i32 g,i32 h,i32 i); struct DlgButton { i8 byte0; i8 byte1; wordRectPos rectPos2; i8 byte10; i8 byte11; }; struct S12406 { i8 byte0; i8 byte1; DlgButton *pDlgButton2; // An array of DlgButton pnt pnt6; pnt pnt10; }; struct STRUCT6 { i32 int0; i16 word4; }; struct STRUCT12 { i32 long0; i16 word4; i16 word6; void (*fnc8)(pnt); }; #define size3764 800 struct E { // PALETTE palette24862; (Use palette24862) //pnt Byte24830[16];(use byte24830) i16 Word24814; pnt Pnt24812; i16 Word24808; i16 Word24806; i16 Word24804; i16 Word24802; i16 Word24800; i16 Word24798; i16 Word24796; i16 Word24794; i8 Byte24792; pnt Pnt24792; i32 Long24300; pnt Pnt24296[100]; pnt Pnt23896[100]; i16 Word23496; i8 Byte23494[1]; CHAOSFILL(23493,23414) //RectPos rectPos23414; (use rectPos23414) i16 Word23398; i16 Word23396; i8 Byte23394[10608];//bitmap 102 lines by 104 bytes //pnt UtilityDiskMessages; //12786 //pnt Pnt12782; // to //pnt Pnt12678; // 12618 //i32 Long12658; // are //i32 Long12654; // 42 string pointers. // // (use UtilityDiskMessages[i]) //pnt Pnt12446;//use pnt12446; //i8 Byte12406;(use s12406) i8 Byte12392; //pnt Pnt12364;(use pnt12364); i8 Byte12336[6]; //actually i32 and i16 //pnt Pnt12246;(use pnt12246) //pnt Pnt12242;(use pnt12242) //pnt Pnt12238;(use pnt12238) //pnt Pnt12226;(use pnt12226) //pnt Pnt12222;(use pnt12222) i16 Word12196; i16 GameFile;//12194; i16 Word12184; PALETTE palette10938; i32 Long9220; i16 FirstQueuedMouseEvent;//9216; i16 LastQueuedMouseEvent;//9214; i8 Byte9212; i8 Byte9211; i16 Word9210; i16 Word9208; i16 Word9206; i16 Word9204; i8 Byte9202[30];// 5 * (i32+i16) ??? i8 Byte9172[6];//i32 and i16?? //pnt Pnt9142;//use pPnt9142 //i16 Word9138[7];//use word9138 i16 Word9124; i16 Word9122; i16 Word9120; i16 Word9116; i16 Word9110; i16 Word9108; i16 Word9106; i16 Word9104; i16 Word9102; i16 Word9098; i16 Word8842[1]; i8 Byte8586[1]; i16 Word8330[1]; i16 Word8328[1]; i16 Word8074; i16 Word8072; i16 Word8070; i16 Word8068; i16 Word8066; pnt Pnt8064; pnt Pnt8060; i16 Word8056; i16 Word8054; pnt PhysicalBase;//8052; i16 Word8048; i16 Word7062; i16 ActualCharacter; // Word7060 i8 CharacterImages[4*464]; // Byte7058 i8 Byte5202[24]; i16 Word5178; wordRectPos wRectPos5176; i16 Word5168; i16 EditBoxSelected; //Word5166 //either NAME or TITLE i16 EditBoxPosition; //Word5164 //wordRectPos wRectPos5162;(use wRectPos5162) //wordRectPos wRectPos5154;(use wRectPos5154) //wordRectPos wRectPos5146;(use wRectPos5146) //wordRectPos wRectPos5138[4];(use wRectPos5138) //wordRectPos wRectPos5106[4];(use wRectPos5106) //wordRectPos wRectPos5066;(use wRectPos5066) //wordREctPos wRectPos5058;(use wREctPos5058) //DlgButton dlgButton5050[4];//(use dlgButton5050) i8 Byte4930[1]; CHAOSFILL(4929,4712) //i8 Byte4712[16];(use byte4712) i16 Word4696; i8 Byte4694[464]; CHAOSFILL(4230,4228) i8 Byte4228[464]; i8 Byte3764[size3764]; i16 Word3122; i16 Word826[5]; i16 Word816[16]; i16 Word784[17]; i16 Word750[8]; i16 Word734[6]; i16 Word722[6]; i16 *Pnt714[7]; i16 Word686; i16 *pw664; pnt Pnt660; i16 *pw656; i16 *pw652; pnt pAllocDBank434; pnt Pnt430; i16 Word426; i16 Word424; pnt pDBank422; i16 Word418; i32 DBankLen416; i8 Byte412[8]; }; E e; unsigned char SelectedColor; PALETTE palette24862 = { 0x0000,0x0333,0x0444,0x0310,0x0066,0x0420,0x0040,0x0060, 0x0700,0x0750,0x0643,0x0770,0x0222,0x0555,0x0007,0x0777}; i8 byte24830[16] = {4,6,4,8,16,4,4,4,4,8,4,0,0,0,8,4}; wordRectPos rectPos23414 = { 0, 193, 0, 101}; wordRectPos rectPos23406 = {62, 255, 48, 149}; char *positions = "CSBGAME\nCSBGAME2\nCSBGAME3\nCSBGAME4\nCANCEL"; char *filenames[] ={ "CSBGAME.DAT", "CSBGAME2.DAT", "CSBGAME3.DAT", "CSBGAME4.DAT", }; pnt UtilityDiskMessages[43] = { "\nPLEASE PUT A\nSAVE GAME DISK IN @", //0 "\nPUT PORTRAIT DISK\nIN @", //1 "\nPUT A BLANK DISK\nIN @", //2 "", //3 "", //4 "", //5 "\n\nREPLACE EXISTING SAVED GAME?", //6 "", //7 "\n\nREPLACE $'s PORTRAIT?", //8 "\n\nPLEASE WAIT . . .\nLOADING SAVED GAME",//9 "\n\nPLEASE WAIT . . .\nSAVING GAME", //10 "", //11 "\n\nCAN'T FIND SAVED GAME", //12 "", //13 "\nSAVED GAME ERROR", //14 "\nERROR WHILE\nSAVING GAME", //15 "", //16 "", //17 "", //18 "", //19 "\nEACH CHAMPION MUST\nHAVE A UNIQUE FIRST NAME!",//20 "", //21 "\n\nPLEASE WAIT . .\nLOADING SAVED ADVENTURE", //22 "\n\nPLEASE WAIT . .\nSAVING NEW ADVENTURE", //23 "CAN'T FIND\nNEW ADVENTURE\nMINI.DAT", //24 "\nTHE NEW ADVENTURE\nIS DAMAGED", //25 "", //26 "", //27 "\nERROR WHILE SAVING\nNEW ADVENTURE", //28 "THE NEW ADVENTURE\nCAN ONLY BE MADE AFTER\nA SAVED GAME IS LOADED.", //29 "\nCAN'T MAKE NEW ADVENTURE\nFROM THIS SAVED GAME.",//30 "LOAD WHICH SAVED GAME?", //31 "OK", //32 "OK\nCANCEL", //33 "SAVE\nFORMAT\nCANCEL", //34 "MAKE NEW ADVENTURE\nFORMAT\nCANCEL", //35 "YES\nNO", //36 "", //37 "", //38 "DUNGEON MASTER\nCHAOS STRIKES BACK\nCANCEL", //39 "", //40 "", //41 "\nPLEASE CHOOSE A\nSAVE GAME SLOT", //42 }; #ifdef _MSVC_INTEL #pragma warning (disable:4305) #pragma warning (disable:4309) #endif i8 byte12618[] = {01,00,00,13,00,00,00,00}; DlgButton dlgButton_12610[] = { {0x01,0x00,{0x0050,0x00ed,0x0080,0x0088},0x00,0x01}, {0x00,0x00,{0x0000,0x0000,0x0000,0x0000},0x00,0x00}, {0x01,0x00,{0x0050,0x0094,0x0080,0x0088},0x00,0x01}, {0x02,0x00,{0x00a5,0x00ed,0x0080,0x0088},0x00,0x01}, {0x00,0x00,{0x0000,0x0000,0x0000,0x0000},0x00,0x00}, {0x01,0x00,{0x0050,0x0094,0x006c,0x0074},0x00,0x01}, {0x02,0x00,{0x00a5,0x00ed,0x006c,0x0074},0x00,0x01}, {0x03,0x00,{0x007b,0x00c4,0x0080,0x0088},0x00,0x01}, {0x00,0x00,{0x0000,0x0000,0x0000,0x0000},0x00,0x00}, {0x01,0x00,{0x0050,0x00ed,0x006c,0x0074},0x00,0x01}, {0x02,0x00,{0x0050,0x0094,0x0080,0x0088},0x00,0x01}, {0x03,0x00,{0x00a5,0x00ed,0x0080,0x0088},0x00,0x01}, {0x00,0x00,{0x0000,0x0000,0x0000,0x0000},0x00,0x00}, {0x01,0x00,{0x0050,0x00ed,0x0058,0x0060},0x00,0x01}, {0x02,0x00,{0x0050,0x00ed,0x006c,0x0074},0x00,0x01}, {0x03,0x00,{0x0050,0x00ed,0x0080,0x0088},0x00,0x01}, {0x00,0x00,{0x0000,0x0000,0x0000,0x0000},0x00,0x00} }; DlgButton four_dlgButon[]={ {0x01,0x00,{0x0050,0x0094,0x0070,0x0078},0x00,0x01}, {0x02,0x00,{0x00a5,0x00ed,0x0070,0x0078},0x00,0x01}, {0x03,0x00,{0x0050,0x0094,0x0080,0x0088},0x00,0x01}, {0x04,0x00,{0x00a5,0x00ed,0x0080,0x0088},0x00,0x01}, {0x00,0x00,{0x0000,0x0000,0x0000,0x0000},0x00,0x00}}; #ifdef _MSVC_INTEL #pragma warning (default:4305) #pragma warning (default:4309) #endif S12406 s12406[] = { { 00,00, &dlgButton_12610[0], byte12618, NULL }, { 00,00, &dlgButton_12610[2], NULL, NULL }, { 00,00, &dlgButton_12610[5], NULL, NULL }, { 00,00, &dlgButton_12610[9], NULL, NULL }, { 00,00, &dlgButton_12610[13], NULL, NULL } }; S12406 fourbuttons[]={ { 00,00, &four_dlgButon[0], NULL, NULL } }; char *pnt12246 = "DMGAME.DAT"; char *pnt12242 = "DMGAME.BAK"; char *pnt12238 = "CSBGAME.DAT"; char *pnt12234 = "CSBGAME.BAK"; char *pnt12222 = "DRIVE B:"; char *pnt12226 = "DRIVE A:"; S12406 *pS12406_9166[6] = {NULL,NULL,NULL,NULL,NULL,NULL};//guessed size! S12406 **ppS12406_9142 = pS12406_9166; i16 word9138[] = { 0x4737, //turn right 0x4838, //forward 0x4b34, //slide left 0x4d36, //slide right 0x5032, //backup 0x5230, //turn left 0x532e};//delete ui32 FrameImage[246] = //byte8046 { 0xffff0000,0xffff0000,0xffff0000,0xffff0000, 0xfff00000,0xfff00000,0xbfff3fff,0x80000000, 0xffffffff,0x00000000,0xfff0fff0,0x00000000, 0xdfff5fff,0x80000000,0xffffffff,0x00000000, 0xfff0ffd0,0x00200000,0xefff6fff,0x80000000, 0xffffffff,0x00000000,0xfff0ff90,0x00600000, 0xf7ff77ff,0x80000000,0xffffffff,0x00000000, 0xfff0ff10,0x00e00000,0xfbff7bff,0x80000000, 0xffffffff,0x00000000,0xfff0fe10,0x01e00000, 0xfc307c30,0x83ff0030,0x00e400e4,0xffff00e4, 0x03f00010,0xffe00000,0xfc607c60,0x83ff0060, 0x01c801c8,0xffff01c8,0x03f00010,0xffe00000, 0xfc807c80,0x83ff0080,0x03800380,0xffff0380, 0x07f00410,0xffe00400,0xfc007c00,0x83ff0000, 0x07000700,0xffff0700,0x0ff00c10,0xffe00c00, 0xfc007c00,0x83ff0000,0x1e001e00,0xffff1e00, 0x0bf00810,0xffe00800,0xfc007c00,0x83ff0000, 0x7c007c00,0xffff7c00,0x13f01010,0xffe01000, 0xfc007c00,0x83ff0000,0xf800f800,0xfffff800, 0x23f02010,0xffe02000,0xfc017c01,0x83ff0001, 0xf000f000,0xfffff000,0x43f04010,0xffe04000, 0xfc037c03,0x83ff0003,0xe000e000,0xffffe000, 0x03f00010,0xffe00000,0xfc077c07,0x83ff0007, 0x00000000,0xffff0000,0x03f00010,0xffe00000, 0xfc0c7c0c,0x83ff000c,0x00000000,0xffff0000, 0x03f00010,0xffe00000,0xfc187c18,0x83ff0018, 0x00000000,0xffff0000,0x03f00010,0xffe00000, 0xfc207c20,0x83ff0020,0x00000000,0xffff0000, 0x03f00010,0xffe00000,0xfc407c40,0x83ff0040, 0x00000000,0xffff0000,0x03f00010,0xffe00000, 0xfc807c80,0x83ff0080,0x00000000,0xffff0000, 0x03f00010,0xffe00000,0xfc007c00,0x83ff0000, 0x00000000,0xffff0000,0x23f02010,0xffe02000, 0xfc007c00,0x83ff0000,0x00000000,0xffff0000, 0x43f04010,0xffe04000,0xfc007c00,0x83ff0000, 0x00010001,0xffff0001,0x83f08010,0xffe08000, 0xfc007c00,0x83ff0000,0x00030003,0xffff0003, 0x03f00010,0xffe00000,0xfc007c00,0x83ff0000, 0x000e000e,0xffff000e,0x03f00010,0xffe00000, 0xfc007c00,0x83ff0000,0x001c001c,0xffff001c, 0x03f00010,0xffe00000,0xfc207c20,0x83ff0020, 0x00380038,0xffff0038,0x03f00010,0xffe00000, 0xfc407c40,0x83ff0040,0x00780078,0xffff0078, 0x07f00410,0xffe00400,0xfd807d80,0x83ff0180, 0x00700070,0xffff0070,0x0ff00c10,0xffe00c00, 0xff007f00,0x83ff0300,0x00e000e0,0xffff00e0, 0x3bf03810,0xffe03800,0xfe007e00,0x83ff0200, 0x00e000e0,0xffff00e0,0x73f07010,0xffe07000, 0xfc007c00,0x83ff0000,0x81c081c0,0xffff81c0, 0x43f04010,0xffe04000,0xfc037c03,0x83ff0003, 0x07800780,0xffff0780,0x83f08010,0xffe08000, 0xfc0e7c0e,0x83ff000e,0x0f000f00,0xffff0f00, 0x03f00010,0xffe00000,0xffff7c00,0x83ff0000, 0xffff0000,0xffff0000,0xfff00210,0xfde00000, 0xffff7800,0x87ff0000,0xffff0000,0xffff0000, 0xfff00110,0xfee00000,0xffff7000,0x8fff0000, 0xffff0000,0xffff0000,0xfff00090,0xff600000, 0xffff6000,0x9fff0000,0xffff0000,0xffff0000, 0xfff00050,0xffa00000,0xffff4000,0xbfff0000, 0xffff0000,0xffff0000,0xfff00030,0xffc00000, 0xffff7fff,0x80000000,0xffffffff,0x00000000, 0xfff0fff0,0x00000000 }; wordRectPos wRectPos5162 = {0x009d,0x00fc,0x003c,0x0092}; wordRectPos wRectPos5154 = {0x011e,0x012f,0x002b,0x00a9}; wordRectPos wRectPos5146 = {0x011c,0x0131,0x0029,0x00ab}; wordRectPos wRectPos5138[4] = { {0x000b,0x002a,0x000e,0x002a}, {0x004e,0x006d,0x000e,0x002a}, {0x0091,0x00b0,0x000e,0x002a}, {0x00d3,0x00f2,0x000e,0x002a} }; wordRectPos wRectPos5106[7] = { {0x000b,0x002a,0x000e,0x002a}, //[0]=5106 {0x004e,0x006d,0x000e,0x002a}, //[1]=5098 {0x0091,0x00b0,0x000e,0x002a}, //[2]=5090 {0x00d3,0x00f2,0x000e,0x002a}, //[3]=5082 {0x004d,0x0078,0x0038,0x0060}, //[4]=5074 {0x0053,0x0072,0x003e,0x005a}, //[5]=5066 {0x0000,0x0098,0x0072,0x00af}, //[6]=5058 }; DlgButton dlgButton5050[17] = { {0x01,0,{ 4, 48, 3, 42},0,1},//[ 0]=5050 {0x02,0,{ 71,115, 3, 42},0,1},//[ 1]=5038 {0x03,0,{138,182, 3, 42},0,1},//[ 2]=5026 {0x04,0,{205,249, 3, 42},0,1},//[ 3]=5014 {0x05,0,{157,252, 60,146},0,1},//[ 4]=5002 {0x06,0,{157,252, 60,146},0,2},//[ 5]=4990 {0x07,0,{286,303, 43,169},0,1},//[ 6]=4978 {0x08,0,{156,196,159,167},0,1},//[ 7]=4966 {0x09,0,{225,253,159,167},0,1},//[ 8]=4954 {0x64,0,{350,349,250,249},0,0},//[ 9]=4942 {0x0b,0,{ 2, 92,186,194},0,1},//[10]=4930 {0x0c,0,{102,192,186,194},0,1},//[11]=4918 {0x0d,0,{202,316,186,194},0,1},//[12]=4906 {0x0e,0,{ 15, 59, 87, 95},0,1},//[13]=4894 {0x0f,0,{ 15,131,100,108},0,1},//[14]=4882 {0x66,0,{350,349,250,249},0,0},//[15]=4870 {0x11,0,{288,316, 5, 13},0,1},//[16]=4858 }; i8 byte4846[8] = {0x09,0x00,0x61,0x00,0x01,0x00,0x3b,0x00}; S12406 s12406_4802 = { 01,00, &dlgButton5050[0], byte4846, NULL }; pnt pnt4788[] = { "FIGHTER", "NINJA", "PRIEST", "WIZARD" }; pnt pnt4772[16] = { "NEOPHYTE ", "NOVICE ", "APPRENTICE ", "JOURNEYMAN ", "CRAFTSMAN ", "ARTISAN ", "ADEPT ", "EXPERT ", "`MASTER ", "a MASTER ", "b MASTER ", "c MASTER ", "d MASTER ", "e MASTER ", "ARCHMASTER " }; i8 byte4712[16] = {0x00,0x0c,0x01,0x02, 0x0d,0x0f,0x03,0x05, 0x0a,0x08,0x09,0x0b, 0x07,0x06,0x04,0x0e }; i8 Byte1278[420] = { 0x00,0x06,0x1b,0x0a,0x0f,0x19,0x0c,0x06,0x06,0x0c,0x09,0x04,0x00,0x00,0x00,0x03, 0x0e,0x02,0x1e,0x1e,0x06,0x1e,0x0e,0x1f,0x0e,0x0e,0x06,0x06,0x03,0x00,0x0c,0x0e, 0x0e,0x0e,0x1e,0x0f,0x1e,0x1f,0x1f,0x0f,0x11,0x1f,0x01,0x09,0x08,0x11,0x11,0x0e, 0x1e,0x0e,0x1e,0x0f,0x1f,0x11,0x11,0x11,0x11,0x11,0x1f,0x0f,0x18,0x0f,0x04,0x00, 0x04,0x1f,0x00,0x04,0x18,0x01,0x00,0x06,0x1b,0x1f,0x14,0x1a,0x1a,0x06,0x0c,0x06, 0x06,0x04,0x00,0x00,0x00,0x06,0x13,0x06,0x01,0x01,0x0a,0x10,0x10,0x01,0x11,0x11, 0x06,0x06,0x06,0x0f,0x06,0x13,0x11,0x11,0x11,0x10,0x11,0x10,0x10,0x10,0x11,0x04, 0x01,0x0a,0x08,0x1b,0x19,0x11,0x11,0x11,0x11,0x10,0x04,0x11,0x11,0x11,0x0a,0x11, 0x02,0x0c,0x0c,0x03,0x0e,0x00,0x09,0x11,0x1f,0x0a,0x04,0x03,0x00,0x06,0x12,0x0a, 0x0e,0x04,0x0c,0x0c,0x0c,0x06,0x0f,0x1f,0x00,0x0f,0x00,0x0c,0x15,0x02,0x0e,0x0e, 0x12,0x1e,0x1e,0x02,0x0e,0x0f,0x00,0x00,0x0c,0x00,0x03,0x06,0x17,0x1f,0x1e,0x10, 0x11,0x1e,0x1e,0x13,0x1f,0x04,0x01,0x0c,0x08,0x15,0x15,0x11,0x1e,0x11,0x1e,0x0e, 0x04,0x11,0x11,0x15,0x04,0x0a,0x04,0x0c,0x06,0x03,0x1b,0x00,0x12,0x11,0x00,0x11, 0x07,0x05,0x00,0x06,0x00,0x1f,0x05,0x0b,0x1d,0x00,0x0c,0x06,0x06,0x04,0x06,0x00, 0x06,0x18,0x19,0x02,0x10,0x01,0x1f,0x01,0x11,0x04,0x11,0x01,0x06,0x06,0x06,0x0f, 0x06,0x06,0x16,0x11,0x11,0x10,0x11,0x10,0x10,0x11,0x11,0x04,0x11,0x0a,0x08,0x11, 0x13,0x11,0x10,0x11,0x14,0x01,0x04,0x11,0x0a,0x1b,0x0a,0x04,0x08,0x0c,0x03,0x03, 0x00,0x00,0x09,0x11,0x1f,0x0a,0x04,0x09,0x00,0x00,0x00,0x0a,0x1e,0x13,0x1a,0x00, 0x06,0x0c,0x09,0x04,0x06,0x00,0x06,0x10,0x0e,0x02,0x1f,0x1e,0x02,0x1e,0x0e,0x04, 0x0e,0x0e,0x06,0x02,0x03,0x00,0x0c,0x00,0x10,0x11,0x1e,0x0f,0x1e,0x1f,0x10,0x0f, 0x11,0x1f,0x0e,0x09,0x0f,0x11,0x11,0x0e,0x10,0x0e,0x13,0x1e,0x04,0x0f,0x04,0x11, 0x11,0x04,0x1f,0x0f,0x01,0x0f,0x00,0x00,0x04,0x1f,0x00,0x04,0x18,0x1f,0x00,0x06, 0x00,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x06,0x0f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00, 0x00,0x00,0x00,0x00}; ui32 Long954[4] = { 0xfff0fff0, 0xfff8fff8, 0xfffcfffc, 0xfffefffe}; ui32 Long938[4] = { 0x7fff7fff, 0x3fff3fff, 0x1fff1fff, 0x0fff0fff}; void reverseBMP(ui32 *bmp, i32 n) { for (i32 i=0; ipDlgButton2; (sA4->byte0!=0)&&(P3!=0); D5W++, sA4 ++) { //00063a 3f3c 000a MOVE.W #10,-(A7) //00063e 486e ffb2 PEA -78(A6) //000642 2f2e 000e MOVE.L 14(A6),-(A7) //000646 4eba fe2a JSR $-468 (=0x000472) //00064a 4fef 000a LEA 10(A7),A7 //00064e 2d40 000e MOVE.L D0,14(A6) P3 = GetSubString(P3, b_78, 10); //000652 3f3c 0002 MOVE.W #2,-(A7) //000656 486e ffb2 PEA -78(A6) //00065a 2f0c MOVE.L A4,-(A7) //00065c 4eba 3202 JSR $+12804 (=0x003860) AddDialogButton(sA4, b_78, 2); //000660 4fef 000a LEA 10(A7),A7 // //000664 5245 ADDQ.W #1,D5 //000666 49ec 000c LEA 12(A4),A4 // //00066a 7000 MOVEQ.L #0,D0 //00066c 1014 MOVE.B (A4),D0 //00066e 4a40 TST.W D0 //000670 6706 BEQ $+8 (=0x000678) //000672 4aae 000e TST.L 14(A6) //000676 66c2 BNE $-60 (=0x00063a) }; //000678 486e ffe4 PEA -28(A6) //00067c 4eba 2982 JSR $+10628 (=0x003000) //000680 588f ADDQ.L #4,A7 //000682 2d40 fffc MOVE.L D0,-4(A6) ppS12406_4 = SetActiveDialog(pS12406_28);// save old value //000686 4eba 2bdc JSR $+11230 (=0x003264) TAG003264(); do { //00068a 486d cfd0 PEA -12336(A5) //00068e 4eba 298c JSR $+10638 (=0x00301c) //000692 588f ADDQ.L #4,A7 //000694 3c00 MOVE.W D0,D6 TAG00301c(_1_,e.Byte12336); D6W = i16Result; //000696 4a40 TST.W D0 //000698 67f0 BEQ $-14 (=0x00068a) } while (D6W == 0); //00069a 4eba 2bb0 JSR $+11186 (=0x00324c) TAG00324c(); //00069e 4a44 TST.W D4 //0006a0 672a BEQ $+44 (=0x0006cc) if (D4W != 0) { //0006a2 303c 00ff MOVE.W #255,D0 //0006a6 c046 AND.W D6,D0 //0006a8 b045 CMP.W D5,D0 //0006aa 6224 BHI $+38 (=0x0006d0) if ( (D6W & 255) <= D5W ) { //0006ac 303c 00ff MOVE.W #255,D0 //0006b0 c046 AND.W D6,D0 //0006b2 206e 0012 MOVE.L 18(A6),A0 //0006b6 5340 SUBQ.W #1,D0 //0006b8 c0fc 000c MULU #12,D0 //0006bc d0a8 0002 ADD.L 2(A0),D0 //0006c0 5480 ADDQ.L #2,D0 //0006c2 2f00 MOVE.L D0,-(A7) //0006c4 4eba 2e66 JSR $+11880 (=0x00352c) //0006c8 588f ADDQ.L #4,A7 TAG00352c(_2_, &P4->pDlgButton2[D6W-1].rectPos2); }; //0006ca 6004 BRA $+6 (=0x0006d0) } else { //0006cc 4eba fe7c JSR $-386 (=0x00054a) TAG00054a(); }; //0006d0 2f2e fffc MOVE.L -4(A6),-(A7) //0006d4 4eba 292a JSR $+10540 (=0x003000) //0006d8 588f ADDQ.L #4,A7 SetActiveDialog(ppS12406_4); //0006da 3006 MOVE.W D6,D0 //0006dc 4cdf 10f0 MOVEM.L (A7)+,D4567A4 //0006e0 4e5e UNLK A6 //0006e2 4e75 RTS RETURN_i16(D6W); } void TAG0006e4(void) { //;;;;;;;;;;;;;;;;;;;;;;;;;;; //0006e4 48e7 0300 MOVEM.L D67,-(A7) //0006e8 42a7 CLR.L -(A7) //0006ea 3f3c 0020 MOVE.W #32,-(A7) //0006ee 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //0006f2 5c8f ADDQ.L #6,A7 SetSupervisorMode(); //0006f4 2c00 MOVE.L D0,D6 //0006f6 3e38 04a6 MOVE.W 1190,D7 //0006fa 41fa 0008 LEA $+10 (=0x000704),A0 //0006fe 21c8 0404 MOVE.L A0,1028 // SetCriticalErrorHandler(); //000702 6004 BRA $+6 (=0x000708) //000704 70ff MOVEQ.L #-1,D0 nmqe //000706 4e75 RTS //000708 2f06 MOVE.L D6,-(A7) //00070a 3f3c 0020 MOVE.W #32,-(A7) //00070e 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //000712 5c8f ADDQ.L #6,A7 ClearSupervisorMode(); //000714 0c47 0002 CMP.W #2,D7 //000718 4e71 NOP //00071a 7001 MOVEQ.L #1,D0 //00071c 3b40 d05c MOVE.W D0,-12196(A5) e.Word12196 = 1; //000720 6038 BRA $+58 (=0x00075a) //000722 7001 MOVEQ.L #1,D0 //000724 3b40 d060 MOVE.W D0,-12192(A5) //000728 206d d042 MOVE.L -12222(A5),A0 //00072c 7041 MOVEQ.L #65,D0 //00072e 1140 0006 MOVE.B D0,6(A0) //000732 206d d02a MOVE.L -12246(A5),A0 //000736 7041 MOVEQ.L #65,D0 //000738 1080 MOVE.B D0,(A0) //00073a 206d d02e MOVE.L -12242(A5),A0 //00073e 7041 MOVEQ.L #65,D0 //000740 1080 MOVE.B D0,(A0) //000742 206d d032 MOVE.L -12238(A5),A0 //000746 7041 MOVEQ.L #65,D0 //000748 1080 MOVE.B D0,(A0) //00074a 206d d036 MOVE.L -12234(A5),A0 //00074e 7041 MOVEQ.L #65,D0 //000750 1080 MOVE.B D0,(A0) //000752 206d d046 MOVE.L -12218(A5),A0 //000756 7041 MOVEQ.L #65,D0 //000758 1080 MOVE.B D0,(A0) //00075a 4cdf 00c0 MOVEM.L (A7)+,D67 //00075e 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG000952(void) { //;;;;;;;;;;;; //000952 4e56 fffe LINK A6,#-2 //000956 7001 MOVEQ.L #1,D0 //000958 3d40 fffe MOVE.W D0,-2(A6) //00095c 603a BRA $+60 (=0x000998) //00095e 4a6e fffe TST.W -2(A6) //000962 6618 BNE $+26 (=0x00097c) //000964 486d cf8a PEA -12406(A5) //000968 2f2d ce8e MOVE.L -12658(A5),-(A7) //00096c 3f3c 8008 MOVE.W #32776,-(A7) //000970 2f2d ce76 MOVE.L -12682(A5),-(A7) //000974 4eba fc12 JSR $-1004 (=0x000588) //000978 4fef 000e LEA 14(A7),A7 //00097c 426e fffe CLR.W -2(A6) //000980 486d cf8a PEA -12406(A5) //000984 2f2d ce8e MOVE.L -12658(A5),-(A7) //000988 3f3c 800f MOVE.W #32783,-(A7) //00098c 2f2d ce62 MOVE.L -12702(A5),-(A7) //000990 4eba fbf6 JSR $-1032 (=0x000588) //000994 4fef 000e LEA 14(A7),A7 //000998 4267 CLR.W -(A7) //00099a 4eba ff40 JSR $-190 (=0x0008dc) //00099e 548f ADDQ.L #2,A7 TAG0008dc(0); //0009a0 303c 0001 MOVE.W #1,D0 return 1; //0009a4 4e5e UNLK A6 //0009a6 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG0009a8(void) { NotImplemented(0x9a8); } // ********************************************************* // // ********************************************************* // TAG000aee i16 ReadGameFile(pnt buf, i32 len) { dReg D0, D7; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //000aee 4e56 0000 LINK A6,#0 //000af2 2f07 MOVE.L D7,-(A7) //000af4 7000 MOVEQ.L #0,D0 //000af6 302e 000c MOVE.W 12(A6),D0 //000afa 2e00 MOVE.L D0,D7 D7L = len; //000afc 4a80 TST.L D0 //000afe 6604 BNE $+6 (=0x000b04) if (D7L == 0) return 1; //000b00 7001 MOVEQ.L #1,D0 //000b02 601e BRA $+32 (=0x000b22) //000b04 2f2e 0008 MOVE.L 8(A6),-(A7) //000b08 2f07 MOVE.L D7,-(A7) //000b0a 3f2d d05e MOVE.W -12194(A5),-(A7) //000b0e 3f3c 003f MOVE.W #63,-(A7) //000b12 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //000b16 4fef 000c LEA 12(A7),A7 D0L = READ(e.GameFile, D7L, buf); //000b1a b087 CMP.L D7,D0 //000b1c 57c0 SEQ D0 if (D7L == D0L) return 1; return 0; //000b1e 4400 NEG.B D0 //000b20 4880 EXT.W D0 //000b22 2e1f MOVE.L (A7)+,D7 //000b24 4e5e UNLK A6 //000b26 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG000b28 i16 WriteGameFile(pnt buf, i16 size) { dReg D0, D7; //;;;;;;;;;;;;;;;;;;; //000b28 4e56 0000 LINK A6,#0 //000b2c 2f07 MOVE.L D7,-(A7) //000b2e 7000 MOVEQ.L #0,D0 //000b30 302e 000c MOVE.W 12(A6),D0 //000b34 2e00 MOVE.L D0,D7 D7L = size; //000b36 4a80 TST.L D0 //000b38 6604 BNE $+6 (=0x000b3e) //000b3a 7001 MOVEQ.L #1,D0 //000b3c 601e BRA $+32 (=0x000b5c) if (D7L == 0) return 1; //000b3e 2f2e 0008 MOVE.L 8(A6),-(A7) //000b42 2f07 MOVE.L D7,-(A7) //000b44 3f2d d05e MOVE.W -12194(A5),-(A7) //000b48 3f3c 0040 MOVE.W #64,-(A7) //000b4c 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //000b50 4fef 000c LEA 12(A7),A7 D0L = WRITE(e.GameFile, D7L, buf); //000b54 b087 CMP.L D7,D0 //000b56 57c0 SEQ D0 //000b58 4400 NEG.B D0 //000b5a 4880 EXT.W D0 if (D0L == D7L) return 1; return 0; //000b5c 2e1f MOVE.L (A7)+,D7 //000b5e 4e5e UNLK A6 //000b60 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG000b94(pnt buf, i16 initSum, i16 numword) { return GenChecksum(buf, initSum, numword); } // ********************************************************* // // ********************************************************* // TAG000bc8 static i16 MyUnscrambleStream(pnt buf, i32 size, i16 initialHash, i16 Checksum) { dReg D0; //;;;; //000bc8 4e56 0000 LINK A6,#0 //000bcc 3f2e 000c MOVE.W 12(A6),-(A7) //000bd0 2f2e 0008 MOVE.L 8(A6),-(A7) //000bd4 4eba ff18 JSR $-230 (=0x000aee) //000bd8 5c8f ADDQ.L #6,A7 D0W = ReadGameFile(buf, size); //000bda 4a40 TST.W D0 //000bdc 671c BEQ $+30 (=0x000bfa) if (D0W == 0) return 0; //000bde 302e 000c MOVE.W 12(A6),D0 //000be2 e248 LSR.W #1,D0 //000be4 3f00 MOVE.W D0,-(A7) //000be6 3f2e 000e MOVE.W 14(A6),-(A7) //000bea 2f2e 0008 MOVE.L 8(A6),-(A7) //000bee 4eba ff72 JSR $-140 (=0x000b62=Unscramble) //000bf2 508f ADDQ.L #0,A7 D0W = Unscramble(buf, initialHash, size/2); //000bf4 b06e 0010 CMP.W 16(A6),D0 //000bf8 6704 BEQ $+6 (=0x000bfe) if (D0W != Checksum) return 0; //000bfa 7000 MOVEQ.L #0,D0 //000bfc 6002 BRA $+4 (=0x000c00) //000bfe 7001 MOVEQ.L #1,D0 //000c00 4e5e UNLK A6 //000c02 4e75 RTS return 1; } // ********************************************************* // // ********************************************************* // TAG01d0ea i16 MyWriteScrambled(pnt buf, i16 byteCount, ui16 initialHash, ui16 *checksum) { dReg D0, D6, D7; aReg A3; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //01d0ea 4e56 0000 LINK A6,#0 //01d0ee 48e7 0310 MOVEM.L D67A3,-(A7) //01d0f2 266e 0008 MOVE.L 8(A6),A3 A3 = buf; //01d0f6 302e 000c MOVE.W 12(A6),D0 //01d0fa e248 LSR.W #1,D0 //01d0fc 3c00 MOVE.W D0,D6 D6W = sw(byteCount/2); //01d0fe 3f00 MOVE.W D0,-(A7) //01d100 3f2e 000e MOVE.W 14(A6),-(A7) //01d104 2f0b MOVE.L A3,-(A7) //01d106 4eba ff40 JSR $-190 (=0x01d048) //01d10a 508f ADDQ.L #0,A7 D0W = Unscramble(A3, initialHash, D6W); //01d10c 206e 0010 MOVE.L 16(A6),A0 //01d110 3080 MOVE.W D0,(A0) *checksum = D0W; //01d112 3f2e 000c MOVE.W 12(A6),-(A7) //01d116 2f0b MOVE.L A3,-(A7) //01d118 4eba feea JSR $-276 (=0x01d004) //01d11c 5c8f ADDQ.L #6,A7 //01d11e 3e00 MOVE.W D0,D7 D7W = WriteGameFile(A3, byteCount); //01d120 3f06 MOVE.W D6,-(A7) //01d122 3f2e 000e MOVE.W 14(A6),-(A7) //01d126 2f0b MOVE.L A3,-(A7) //01d128 4eba ff1e JSR $-224 (=0x01d048) //01d12c 508f ADDQ.L #0,A7 D0W = Unscramble(A3, initialHash, D6W); //01d12e 3007 MOVE.W D7,D0 return D7W; //01d130 4cdf 08c0 MOVEM.L (A7)+,D67A3 //01d134 4e5e UNLK A6 //01d136 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG000c52(pnt P1, i16 *P2, i32 P3) { dReg D0, D6, D7; aReg A4; i16 *wA3; //;;;;;;; //000c52 4e56 0000 LINK A6,#0 //000c56 48e7 0318 MOVEM.L D67A34,-(A7) //000c5a 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //000c5e 266e 000c MOVE.L 12(A6),A3 wA3 = P2; //000c62 3e2e 0010 MOVE.W 16(A6),D7 D7W = sw(P3); //000c66 7c00 MOVEQ.L #0,D6 D6W = 0; //000c68 3f07 MOVE.W D7,-(A7) //000c6a 2f0c MOVE.L A4,-(A7) //000c6c 4eba fe80 JSR $-382 (=0x000aee=ReadGameFile) //000c70 5c8f ADDQ.L #6,A7 D0W = ReadGameFile(A4, D7W); //000c72 4a40 TST.W D0 //000c74 660e BNE $+16 (=0x000c84) //000c76 7000 MOVEQ.L #0,D0 //000c78 6016 BRA $+24 (=0x000c90) if (D0W == 0) return 0; while ((D7W--) != 0) { //000c7a 41d4 LEA (A4),A0 //000c7c 528c ADDQ.L #1,A4 //000c7e 7000 MOVEQ.L #0,D0 //000c80 1010 MOVE.B (A0),D0 D6W = (UI16)(D6W + ub(*(A4++))); //000c82 dc40 ADD.W D0,D6 //000c84 3007 MOVE.W D7,D0 //000c86 5347 SUBQ.W #1,D7 //000c88 4a40 TST.W D0 //000c8a 66ee BNE $-16 (=0x000c7a) }; //000c8c dd53 ADD.W D6,(A3) *wA3 = (UI16)(*wA3 + D6W); //000c8e 7001 MOVEQ.L #1,D0 //000c90 4cdf 18c0 MOVEM.L (A7)+,D67A34 //000c94 4e5e UNLK A6 //000c96 4e75 RTS return 1; } // ********************************************************* // // ********************************************************* // TAG000c98 i16 MyWriteAndChecksum(pnt P1, ui16 *P2, i32 P3) { dReg D0, D6, D7; aReg A4; ui16 *uwA3; //;;;;;;;;;;;;;;;;;;;;;;;; //000c98 4e56 0000 LINK A6,#0 //000c9c 48e7 0318 MOVEM.L D67A34,-(A7) //000ca0 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //000ca4 266e 000c MOVE.L 12(A6),A3 uwA3 = P2; //000ca8 3e2e 0010 MOVE.W 16(A6),D7 D7W = sw(P3); //000cac 7c00 MOVEQ.L #0,D6 D6W = 0; //000cae 3f07 MOVE.W D7,-(A7) //000cb0 2f0c MOVE.L A4,-(A7) //000cb2 4eba fe74 JSR $-394 (=0x000b28) //000cb6 5c8f ADDQ.L #6,A7 D0W = WriteGameFile(A4, D7W); //000cb8 4a40 TST.W D0 //000cba 660e BNE $+16 (=0x000cca) //000cbc 7000 MOVEQ.L #0,D0 //000cbe 6016 BRA $+24 (=0x000cd6) if (D0W == 0) return 0; while (D7W != 0) { //000cc0 41d4 LEA (A4),A0 //000cc2 528c ADDQ.L #1,A4 //000cc4 7000 MOVEQ.L #0,D0 //000cc6 1010 MOVE.B (A0),D0 //000cc8 dc40 ADD.W D0,D6 D6W = (UI16)(D6W + ub(*(A4++))); //000cca 3007 MOVE.W D7,D0 //000ccc 5347 SUBQ.W #1,D7 D7W--; //000cce 4a40 TST.W D0 //000cd0 66ee BNE $-16 (=0x000cc0) }; //000cd2 dd53 ADD.W D6,(A3) *uwA3 = (UI16)(*uwA3 + D6W); //000cd4 7001 MOVEQ.L #1,D0 return 1; //000cd6 4cdf 18c0 MOVEM.L (A7)+,D67A34 //000cda 4e5e UNLK A6 //000cdc 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG000cde i16 ReadGameBlock1(pnt P1) { dReg D0; aReg A4; //;;;;;;;;;;;;;;;;;;;;;; //000cde 4e56 0000 LINK A6,#0 //000ce2 48e7 0708 MOVEM.L D567A4,-(A7) //000ce6 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //000cea 3f3c 0200 MOVE.W #512,-(A7) //000cee 2f0c MOVE.L A4,-(A7) //000cf0 4eba fdfc JSR $-514 (=0x000aee) //000cf4 5c8f ADDQ.L #6,A7 D0W = ReadGameFile(A4, 512); //000cf6 4a40 TST.W D0 //000cf8 6604 BNE $+6 (=0x000cfe) if (D0W == 0) return 0; //000cfa 7000 MOVEQ.L #0,D0 //000cfc 6002 BRA $+4 (=0x000d00) //000cfe 7001 MOVEQ.L #1,D0 return 1; //000d00 4cdf 10e0 MOVEM.L (A7)+,D567A4 //000d04 4e5e UNLK A6 //000d06 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG000d08 i16 UnscrambleBlock1(pnt P1,i16 P2) { dReg D5, D6, D7; pnt A0, A4; //;;;;;;;;;;;;;;;;;;;;;;;;;; //000d08 4e56 0000 LINK A6,#0 //000d0c 48e7 0708 MOVEM.L D567A4,-(A7) //000d10 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //000d14 7e20 MOVEQ.L #32,D7 D7L = 32; //000d16 7c00 MOVEQ.L #0,D6 D6L = 0; do { //000d18 41d4 LEA (A4),A0 //000d1a 548c ADDQ.L #2,A4 //000d1c dc50 ADD.W (A0),D6 D6W = (UI16)(D6W + LE16(wordGear(A4))); //000d1e 41d4 LEA (A4),A0 //000d20 548c ADDQ.L #2,A4 //000d22 3010 MOVE.W (A0),D0 //000d24 b146 EOR.W D0,D6 D6W ^= LE16(wordGear(A4+2)); //000d26 41d4 LEA (A4),A0 //000d28 548c ADDQ.L #2,A4 //000d2a 9c50 SUB.W (A0),D6 D6W = (UI16)(D6W - LE16(wordGear(A4+4))); //000d2c 41d4 LEA (A4),A0 //000d2e 548c ADDQ.L #2,A4 //000d30 3010 MOVE.W (A0),D0 //000d32 b146 EOR.W D0,D6 D6W = (UI16)(D6W ^ LE16(wordGear(A4+6))); A4 += 8; D7W--; //000d34 5347 SUBQ.W #1,D7 //000d36 4a47 TST.W D7 //000d38 66de BNE $-32 (=0x000d18) } while (D7W != 0); //000d3a 302e 000c MOVE.W 12(A6),D0 //000d3e 4840 SWAP D0 //000d40 4240 CLR.W D0 //000d42 4840 SWAP D0 //000d44 d080 ADD.L D0,D0 //000d46 d0ae 0008 ADD.L 8(A6),D0 //000d4a 3f3c 0080 MOVE.W #128,-(A7) //000d4e 2040 MOVE.L D0,A0 //000d50 3f10 MOVE.W (A0),-(A7) //000d52 2f0c MOVE.L A4,-(A7) //000d54 4eba fe0c JSR $-498 (=0x000b62=Unscramble) //000d58 508f ADDQ.L #0,A7 Unscramble(A4, LE16(wordGear(P1 + 2*P2)), 128); //000d5a 7a00 MOVEQ.L #0,D5 D5W = 0; //000d5c 3e3c 0080 MOVE.W #128,D7 D7W = 128; do { //000d60 41d4 LEA (A4),A0 A0 = A4; //000d62 548c ADDQ.L #2,A4 A4 += 2; //000d64 da50 ADD.W (A0),D5 D5W = (UI16)(D5W + LE16(wordGear(A0))); //000d66 5347 SUBQ.W #1,D7 D7W--; //000d68 4a47 TST.W D7 //000d6a 66f4 BNE $-10 (=0x000d60) } while (D7W != 0); //000d6c bc45 CMP.W D5,D6 //000d6e 57c0 SEQ D0 //000d70 4400 NEG.B D0 //000d72 4880 EXT.W D0 if (D5W == D6W) return 1; return 0; //000d74 4cdf 10e0 MOVEM.L (A7)+,D567A4 //000d78 4e5e UNLK A6 //000d7a 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG000d7c i16 WriteFirstBlock(pnt buf, i16 offset) { dReg D5, D6, D7; aReg A0, A4; //;;;;;;;;;;;;;;;;; //000d7c 4e56 fffc LINK A6,#-4 //000d80 48e7 0708 MOVEM.L D567A4,-(A7) //000d84 7a00 MOVEQ.L #0,D5 D5W = 0; //000d86 3e3c 0080 MOVE.W #128,D7 D7W = 128; //000d8a 206e 0008 MOVE.L 8(A6),A0 //000d8e 41e8 0100 LEA 256(A0),A0 //000d92 2848 MOVE.L A0,A4 A4 = buf+256; do { //000d94 41d4 LEA (A4),A0 //000d96 548c ADDQ.L #2,A4 //000d98 da50 ADD.W (A0),D5 D5W = (I16)(D5W + LE16(wordGear(A4))); // Second half-block checksum A4 += 2; //000d9a 5347 SUBQ.W #1,D7 D7W--; //000d9c 4a47 TST.W D7 //000d9e 66f4 BNE $-10 (=0x000d94) } while (D7W != 0); //000da0 7e20 MOVEQ.L #32,D7 D7W = 32; //000da2 7c00 MOVEQ.L #0,D6 D6W = 0; //000da4 286e 0008 MOVE.L 8(A6),A4 A4 = buf; for (;;) { // 32 times 4 random 16-bit words = 256 bytes. // Except we skip the last word in the block. //000da8 41d4 LEA (A4),A0 //000daa 548c ADDQ.L #2,A4 //000dac 2d48 fffc MOVE.L A0,-4(A6) //000db0 4eba 1e66 JSR $+7784 (=0x002c18) Random //000db4 206e fffc MOVE.L -4(A6),A0 //000db8 3080 MOVE.W D0,(A0) wordGear(A4) = 0; //(i16)STRandom(); //000dba dc40 ADD.W D0,D6 D6W = (UI16)(D6W + LE16(wordGear(A4))); A4 += 2; //000dbc 41d4 LEA (A4),A0 //000dbe 548c ADDQ.L #2,A4 //000dc0 2d48 fffc MOVE.L A0,-4(A6) //000dc4 4eba 1e52 JSR $+7764 (=0x002c18) //000dc8 206e fffc MOVE.L -4(A6),A0 //000dcc 3080 MOVE.W D0,(A0) wordGear(A4) = 0; //(i16)STRandom(); //000dce b146 EOR.W D0,D6 D6W ^= LE16(wordGear(A4)); A4 += 2; //000dd0 41d4 LEA (A4),A0 //000dd2 548c ADDQ.L #2,A4 //000dd4 2d48 fffc MOVE.L A0,-4(A6) //000dd8 4eba 1e3e JSR $+7744 (=0x002c18) //000ddc 206e fffc MOVE.L -4(A6),A0 //000de0 3080 MOVE.W D0,(A0) wordGear(A4) = 0; //(i16)STRandom(); //000de2 9c40 SUB.W D0,D6 D6W = (UI16)(D6W - LE16(wordGear(A4))); A4 += 2; //000de4 5347 SUBQ.W #1,D7 D7W--; //000de6 4a47 TST.W D7 //000de8 6716 BEQ $+24 (=0x000e00) if (D7W == 0) break; //000dea 41d4 LEA (A4),A0 //000dec 548c ADDQ.L #2,A4 //000dee 2d48 fffc MOVE.L A0,-4(A6) //000df2 4eba 1e24 JSR $+7718 (=0x002c18) //000df6 206e fffc MOVE.L -4(A6),A0 //000dfa 3080 MOVE.W D0,(A0) wordGear(A4) = 0; //(i16)STRandom(); //000dfc b146 EOR.W D0,D6 D6W ^= LE16(wordGear(A4)); A4 += 2; //000dfe 60a8 BRA $-86 (=0x000da8) } ; //000e00 41d4 LEA (A4),A0 //000e02 548c ADDQ.L #2,A4 //000e04 3006 MOVE.W D6,D0 //000e06 bb40 EOR.W D5,D0 //000e08 3080 MOVE.W D0,(A0) wordGear(A4) = LE16(D6W ^ D5W); A4 += 2; //000e0a 302e 000c MOVE.W 12(A6),D0 //000e0e 4840 SWAP D0 //000e10 4240 CLR.W D0 //000e12 4840 SWAP D0 //000e14 d080 ADD.L D0,D0 //000e16 d0ae 0008 ADD.L 8(A6),D0 //000e1a 3f3c 0080 MOVE.W #128,-(A7) //000e1e 2040 MOVE.L D0,A0 A0 = buf + 2*offset; //000e20 3f10 MOVE.W (A0),-(A7) //000e22 2f0c MOVE.L A4,-(A7) //000e24 4eba fd3c JSR $-706 (=0x000b62=Unscramble) //000e28 508f ADDQ.L #0,A7 Unscramble(A4, LE16(wordGear(A0)), 128); //000e2a 3f3c 0200 MOVE.W #512,-(A7) //000e2e 2f2e 0008 MOVE.L 8(A6),-(A7) //000e32 4eba fcf4 JSR $-778 (=0x000b28) //000e36 5c8f ADDQ.L #6,A7 //000e38 3e00 MOVE.W D0,D7 D7W = WriteGameFile(buf, 512); //000e3a 302e 000c MOVE.W 12(A6),D0 //000e3e 4840 SWAP D0 //000e40 4240 CLR.W D0 //000e42 4840 SWAP D0 //000e44 d080 ADD.L D0,D0 //000e46 d0ae 0008 ADD.L 8(A6),D0 //000e4a 3f3c 0080 MOVE.W #128,-(A7) //000e4e 2040 MOVE.L D0,A0 A0 = buf + 2*offset; //000e50 3f10 MOVE.W (A0),-(A7) //000e52 2f0c MOVE.L A4,-(A7) //000e54 4eba fd0c JSR $-754 (=0x000b62=Unscramble) //000e58 508f ADDQ.L #0,A7 Unscramble(A4, LE16(wordGear(A0)), 128); //000e5a 3007 MOVE.W D7,D0 return D7W; //000e5c 4cdf 10e0 MOVEM.L (A7)+,D567A4 //000e60 4e5e UNLK A6 //000e62 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG0008dc(i16) { return 1; } // ********************************************************* // // ********************************************************* // TAG000e64 RESTARTABLE _CheckChampionNames(void) {//(i16) static dReg D0, D6, D7; static aReg A0, A4; RESTARTMAP RESTART(1) END_RESTARTMAP //;;;;;;;;;;;;;;;;;;;;;; //000e64 48e7 0308 MOVEM.L D67A4,-(A7) //000e68 7e00 MOVEQ.L #0,D7 //000e6a 6000 0064 BRA $+102 (=0x000ed0) for (D7L=0; D7W