// ********************************************************* // 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= 0) CLOSE(e.GameFile); //001968 202d d032 MOVE.L -12238(A5),D0 //00196c 2d40 edd2 MOVE.L D0,-4654(A6) //pnt_4654 = pnt12238; pnt_4654 = savegame; //001970 4267 CLR.W -(A7) //001972 2f00 MOVE.L D0,-(A7) //001974 3f3c 003d MOVE.W #61,-(A7) //001978 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //00197c 508f ADDQ.L #0,A7 //00197e 3b40 d05e MOVE.W D0,-12194(A5) e.GameFile = OPEN(savegame, 0); //001982 4a40 TST.W D0 //001984 6c22 BGE $+36 (=0x0019a8) if (e.GameFile < 0) { //001986 202d d036 MOVE.L -12234(A5),D0 //00198a 2d40 edd2 MOVE.L D0,-4654(A6) //pnt_4654 = pnt12234; //00198e 4267 CLR.W -(A7) //001990 2f00 MOVE.L D0,-(A7) //001992 3f3c 003d MOVE.W #61,-(A7) //001996 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //00199a 508f ADDQ.L #0,A7 //00199c 3b40 d05e MOVE.W D0,-12194(A5) //e.GameFile = OPEN(pnt12234,0); //0019a0 4a40 TST.W D0 //0019a2 6c04 BGE $+6 (=0x0019a8) //0019a4 426e efe6 CLR.W -4122(A6) if (e.GameFile < 0) w_4122 = 0; }; //0019a8 3f2d d05e MOVE.W -12194(A5),-(A7) //0019ac 3f3c 003e MOVE.W #62,-(A7) //0019b0 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //0019b4 588f ADDQ.L #4,A7 if (e.GameFile >= 0) CLOSE(e.GameFile); //0019b6 302e efe8 MOVE.W -4120(A6),D0 //0019ba d06e efe6 ADD.W -4122(A6),D0 //0019be 0c40 0001 CMP.W #1,D0 //0019c2 6c26 BGE $+40 (=0x0019ea) if (w_4120 + w_4122 < 1) { //0019c4 486d cf8a PEA -12406(A5) //0019c8 2f2d ce8e MOVE.L -12658(A5),-(A7) //0019cc 3f3c 8008 MOVE.W #32776,-(A7) //0019d0 2f2d ce3e MOVE.L -12738(A5),-(A7) //0019d4 4eba ebb2 JSR $-5196 (=0x000588) //0019d8 4fef 000e LEA 14(A7),A7 UtilityDialogBox(_3_, UtilityDiskMessages[12], (unsigned)0x8008, UtilityDiskMessages[32], &s12406[0]); //0019dc 08ee 0007 fffa BSET 7,-6(A6) w_6 |= 0x8000; //0019e2 426e fffe CLR.W -2(A6) w_2 = 0; //0019e6 6000 0080 BRA $+130 (=0x001a68) } else { //0019ea 302e efe8 MOVE.W -4120(A6),D0 //0019ee d06e efe6 ADD.W -4122(A6),D0 //0019f2 0c40 0001 CMP.W #1,D0 //0019f6 6f48 BLE $+74 (=0x001a40) if (w_4120 + w_4122 > 1) { //0019f8 486d cfc2 PEA -12350(A5) //0019fc 2f2d ceaa MOVE.L -12630(A5),-(A7) //001a00 3f3c 800f MOVE.W #32783,-(A7) //001a04 2f2d ce8a MOVE.L -12662(A5),-(A7) //001a08 4eba eb7e JSR $-5248 (=0x000588) //001a0c 4fef 000e LEA 14(A7),A7 //001a10 3d40 fffc MOVE.W D0,-4(A6) UtilityDialogBox(_4_, UtilityDiskMessages[31], (unsigned)0x800f, UtilityDiskMessages[39], &s12406[4]); w_4 = i16Result; //001a14 0c6e 0001 fffc CMP.W #1,-4(A6) //001a1a 6730 BEQ $+50 (=0x001a4c) if (w_4 == 1) goto tag001a4c; //001a1c 0c6e 0002 fffc CMP.W #2,-4(A6) //001a22 6608 BNE $+10 (=0x001a2c) if (w_4 == 2) { //001a24 2d6e edd2 edd6 MOVE.L -4654(A6),-4650(A6) pnt_4650 = pnt_4654; //001a2a 6020 BRA $+34 (=0x001a4c) goto tag001a4c; }; //001a2c 4a6d d068 TST.W -12184(A5) //001a30 6604 BNE $+6 (=0x001a36) if (e.Word12184 == 0) { //001a32 70ff MOVEQ.L #-1,D0 nmqe D0L = 1; //001a34 6002 BRA $+4 (=0x001a38) } else { //001a36 709d MOVEQ.L #-99,D0 nmqe D0L = 99; }; //001a38 3d40 fffe MOVE.W D0,-2(A6) w_2 = D0W; //001a3c 6000 035c BRA $+862 (=0x001d9a) goto tag001d9a; }; //001a40 4a6e efe6 TST.W -4122(A6) //001a44 6706 BEQ $+8 (=0x001a4c) if (w_4122 != 0) { //001a46 2d6e edd2 edd6 MOVE.L -4654(A6),-4650(A6) pnt_4650 = pnt_4654; }; tag001a4c: //001a4c 4267 CLR.W -(A7) //001a4e 2f2e edd6 MOVE.L -4650(A6),-(A7) //001a52 3f3c 003d MOVE.W #61,-(A7) //001a56 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //001a5a 508f ADDQ.L #0,A7 //001a5c 3b40 d05e MOVE.W D0,-12194(A5) e.GameFile = OPEN(pnt_4650, 0); //001a60 4a40 TST.W D0 //001a62 6c04 BGE $+6 (=0x001a68) //001a64 426e fffe CLR.W -2(A6) if (e.GameFile < 0) w_2 = 0; }; }; //001a68 0c6e 0001 fffe CMP.W #1,-2(A6) //001a6e 6600 fe24 BNE $-474 (=0x001894) } while (w_2 != 1); //001a72 2f2e edd6 MOVE.L -4650(A6),-(A7) //001a76 486c 0004 PEA 4(A4) //001a7a 4ead 018a JSR 394(A5) (=0x006520) //001a7e 508f ADDQ.L #0,A7 StrCpy(A4+4,pnt_4650); //001a80 4a47 TST.W D7 //001a82 6706 BEQ $+8 (=0x001a8a) if (D7W != 0) { //001a84 202d ce66 MOVE.L -12698(A5),D0 A0 = UtilityDiskMessages[22]; //001a88 6004 BRA $+6 (=0x001a8e) } else { //001a8a 202d ce32 MOVE.L -12750(A5),D0 A0 = UtilityDiskMessages[9]; }; //001a8e 42a7 CLR.L -(A7) //001a90 42a7 CLR.L -(A7) //001a92 3f3c 000f MOVE.W #15,-(A7) //001a96 2f00 MOVE.L D0,-(A7) //001a98 4eba eaee JSR $-5392 (=0x000588) //001a9c 4fef 000e LEA 14(A7),A7 UtilityDialogBox(_5_, A0, 15, NULL, NULL); //001aa0 701d MOVEQ.L #29,D0 //001aa2 3940 0024 MOVE.W D0,36(A4) //001aa6 7002 MOVEQ.L #2,D0 //001aa8 3940 0002 MOVE.W D0,2(A4) wordGear(A4+36) = 29; wordGear(A4+2) = 2; //001aac 486c 0026 PEA 38(A4) //001ab0 4eba f22c JSR $-3538 (=0x000cde) //001ab4 588f ADDQ.L #4,A7 D0W = ReadGameBlock1(A4+38); //001ab6 4a40 TST.W D0 //001ab8 6700 02ee BEQ $+752 (=0x001da8) if (D0W == 0) goto tag001da8; //001abc 4878 0200 PEA 512 //001ac0 3f3c 0400 MOVE.W #1024,-(A7) //001ac4 3f3c 0400 MOVE.W #1024,-(A7) //001ac8 486e ede2 PEA -4638(A6) //001acc 486c 0026 PEA 38(A4) //001ad0 4ead 015a JSR 346(A5) (=0x00858c) //001ad4 4fef 0010 LEA 16(A7),A7 MemoryMove(A4+38, b_4638, 0x400, 0x400, 512); // We just saved the scrambled version at b_4638 //001ad8 3f2c 0024 MOVE.W 36(A4),-(A7) //001adc 486c 0026 PEA 38(A4) //001ae0 4eba f226 JSR $-3544 (=0x000d08) //001ae4 5c8f ADDQ.L #6,A7 D0W = UnscrambleBlock1(A4+38, wordGear(A4+36)); //001ae6 4a40 TST.W D0 //001ae8 663c BNE $+62 (=0x001b26) if (D0W == 0) { // It didn't work with that key! //001aea 700a MOVEQ.L #10,D0 //001aec 3940 0024 MOVE.W D0,36(A4) wordGear(A4+36) = 10; //001af0 7001 MOVEQ.L #1,D0 //001af2 3940 0002 MOVE.W D0,2(A4) wordGear(A4+2) = 1; //001af6 4878 0200 PEA 512 //001afa 3f3c 0400 MOVE.W #1024,-(A7) //001afe 3f3c 0400 MOVE.W #1024,-(A7) //001b02 486c 0026 PEA 38(A4) //001b06 486e ede2 PEA -4638(A6) //001b0a 4ead 015a JSR 346(A5) (=0x00858c) //001b0e 4fef 0010 LEA 16(A7),A7 MemoryMove(b_4638, A4+38, 0x400, 0x400, 512); // We have replaced buffer with original, scrambled version //001b12 3f2c 0024 MOVE.W 36(A4),-(A7) //001b16 486c 0026 PEA 38(A4) //001b1a 4eba f1ec JSR $-3602 (=0x000d08) //001b1e 5c8f ADDQ.L #6,A7 D0W = UnscrambleBlock1(A4+38, wordGear(A4+36)); // Now unscramble with word 10 as initial hash. //001b20 4a40 TST.W D0 //001b22 6700 0284 BEQ $+646 (=0x001da8) if (D0W == 0) goto tag001da8; }; //001b26 0c6c 0002 0002 CMP.W #2,2(A4) //001b2c 661a BNE $+28 (=0x001b48) if (wordGear(A4+2) == 2) { //001b2e 206e efe2 MOVE.L -4126(A6),A0 //001b32 41e8 0158 LEA 344(A0),A0 //001b36 2d48 edde MOVE.L A0,-4642(A6) pnt_4642 = pnt_4126 + 344; //001b3a 206e efe2 MOVE.L -4126(A6),A0 //001b3e 41e8 0138 LEA 312(A0),A0 //001b42 2d48 edda MOVE.L A0,-4646(A6) pnt_4646 = pnt_4126 + 312; //001b46 6010 BRA $+18 (=0x001b58) } else { //001b48 41ec 017c LEA 380(A4),A0 //001b4c 2d48 edde MOVE.L A0,-4642(A6) pnt_4642 = A4 + 380; //001b50 41ec 015c LEA 348(A4),A0 //001b54 2d48 edda MOVE.L A0,-4646(A6) pnt_4646 = A4 + 348; }; //001b58 206e edde MOVE.L -4642(A6),A0 //001b5c 3f10 MOVE.W (A0),-(A7) //001b5e 206e edda MOVE.L -4646(A6),A0 //001b62 3f10 MOVE.W (A0),-(A7) //001b64 3f3c 0080 MOVE.W #128,-(A7) //001b68 486c 0226 PEA 550(A4) //001b6c 4eba f05a JSR $-4004 (=0x000bc8=UnscrambleStream) //001b70 4fef 000a LEA 10(A7),A7 //001b74 4a40 TST.W D0 D0W = MyUnscrambleStream(A4+550, 128, LE16(wordGear(pnt_4646)), LE16(wordGear(pnt_4642)) ); //001b76 6700 0230 BEQ $+562 (=0x001da8) if (D0W == 0) goto tag001da8; //001b7a 302c 0254 MOVE.W 596(A4),D0 //001b7e e940 ASL.W #4,D0 //001b80 4840 SWAP D0 //001b82 4240 CLR.W D0 //001b84 4840 SWAP D0 //001b86 2f00 MOVE.L D0,-(A7) //001b88 4eba e79e JSR $-6240 (=0x000328) //001b8c 588f ADDQ.L #4,A7 //001b8e 2940 1004 MOVE.L D0,4100(A4) pntGear(A4+4100) = AllocateMemory(16*LE16(wordGear(A4+596))); //001b92 302c 0242 MOVE.W 578(A4),D0 //001b96 c1fc 000a MULS #10,D0 //001b9a 4840 SWAP D0 //001b9c 4240 CLR.W D0 //001b9e 4840 SWAP D0 //001ba0 2f00 MOVE.L D0,-(A7) //001ba2 4eba e784 JSR $-6266 (=0x000328) //001ba6 588f ADDQ.L #4,A7 //001ba8 2940 1008 MOVE.L D0,4104(A4) pntGear(A4+4104) = AllocateMemory(10*LE16(wordGear(A4+578))); //001bac 302c 0242 MOVE.W 578(A4),D0 //001bb0 d040 ADD.W D0,D0 //001bb2 4840 SWAP D0 //001bb4 4240 CLR.W D0 //001bb6 4840 SWAP D0 //001bb8 2f00 MOVE.L D0,-(A7) //001bba 4eba e76c JSR $-6290 (=0x000328) //001bbe 588f ADDQ.L #4,A7 //001bc0 2940 100c MOVE.L D0,4108(A4) pntGear(A4+4108) = AllocateMemory(2*LE16(wordGear(A4+578))); //001bc4 302c 0254 MOVE.W 596(A4),D0 //001bc8 e940 ASL.W #4,D0 //001bca 206e edde MOVE.L -4642(A6),A0 //001bce 3f28 0002 MOVE.W 2(A0),-(A7) //001bd2 206e edda MOVE.L -4646(A6),A0 //001bd6 3f28 0002 MOVE.W 2(A0),-(A7) //001bda 3f00 MOVE.W D0,-(A7) //001bdc 2f2c 1004 MOVE.L 4100(A4),-(A7) //001be0 4eba efe6 JSR $-4120 (=0x000bc8=UnscrambleStream) //001be4 4fef 000a LEA 10(A7),A7 D0W = MyUnscrambleStream(pntGear(A4+4100), 16*LE16(wordGear(A4+596)), LE16(wordGear(pnt_4646+2)), LE16(wordGear(pnt_4642+2)) ); //001be8 4a40 TST.W D0 //001bea 6700 01bc BEQ $+446 (=0x001da8) if (D0W == 0) goto tag001da8; //001bee 206e edde MOVE.L -4642(A6),A0 //001bf2 3f28 0004 MOVE.W 4(A0),-(A7) //001bf6 206e edda MOVE.L -4646(A6),A0 //001bfa 3f28 0004 MOVE.W 4(A0),-(A7) //001bfe 3f3c 0d00 MOVE.W #3328,-(A7) //001c02 486c 0304 PEA 772(A4) //001c06 4eba efc0 JSR $-4158 (=0x000bc8=UnscrambleStream) //001c0a 4fef 000a LEA 10(A7),A7 // Next is the character data. D0W = MyUnscrambleStream(A4+772, 3328, LE16(wordGear(pnt_4646+4)), LE16(wordGear(pnt_4642+4)) ); //001c0e 4a40 TST.W D0 //001c10 6700 0196 BEQ $+408 (=0x001da8) if (D0W == 0) goto tag001da8; //001c14 426e fffe CLR.W -2(A6) //001c18 6000 00aa BRA $+172 (=0x001cc4) for (w_2=0; w_2= 0) { CLOSE(e.GameFile); e.GameFile = -1; }; goto tag001d9a; //001dde 4cdf 1080 MOVEM.L (A7)+,D7A4 //001de2 4e5e UNLK A6 //001de4 4e75 RTS //RETURN_i16(0); } // ********************************************************* // // ********************************************************* RESTARTABLE _TAG00260e(void) {//(i16) static pnt pnt_12; static pnt pnt_8; static pnt pnt_4; RESTARTMAP RESTART(1) RESTART(2) END_RESTARTMAP //;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //00260e 4e56 fff4 LINK A6,#-12 //002612 2d6d 9f14 fffc MOVE.L -24812(A5),-4(A6) pnt_4 = e.Pnt24812; //002618 2d6d ce86 fff4 MOVE.L -12666(A5),-12(A6) pnt_12 = UtilityDiskMessages[30]; //00261e 206d 9f14 MOVE.L -24812(A5),A0 //002622 4a50 TST.W (A0) //002624 6706 BEQ $+8 (=0x00262c) //002626 4a6d 9f12 TST.W -24814(A5) //00262a 660a BNE $+12 (=0x002636) for (;;) { if ( (wordGear(e.Pnt24812) == 0) || (e.Word24814 ==0) ) { //00262c 2d6d ce82 fff4 MOVE.L -12670(A5),-12(A6) pnt_12 = UtilityDiskMessages[29]; //002632 6000 0072 BRA $+116 (=0x0026a6) } else { //002636 206e fffc MOVE.L -4(A6),A0 //00263a 41e8 0026 LEA 38(A0),A0 //00263e 2d48 fff8 MOVE.L A0,-8(A6) pnt_8 = pnt_4 + 38; //002642 206e fffc MOVE.L -4(A6),A0 //002646 0c68 0001 0002 CMP.W #1,2(A0) //00264c 672a BEQ $+44 (=0x002678) if (wordGear(pnt_4+2) != 1) { //00264e 206e fff8 MOVE.L -8(A6),A0 //002652 7000 MOVEQ.L #0,D0 //002654 1028 012d MOVE.B 301(A0),D0 //002658 0c40 0001 CMP.W #1,D0 //00265c 670c BEQ $+14 (=0x00266a) //00265e 206e fff8 MOVE.L -8(A6),A0 //002662 0c68 0001 0178 CMP.W #1,376(A0) //002668 663c BNE $+62 (=0x0026a6) if ( (pnt_8[301] != 1) && (LE16(wordGear(pnt_8+376)) != 1) ) break; //00266a 206e fff8 MOVE.L -8(A6),A0 //00266e 0c68 000c 017a CMP.W #12,378(A0) //002674 6230 BHI $+50 (=0x0026a6) if (LE16(wordGear(pnt_8+378)) > 12) break; //002676 6028 BRA $+42 (=0x0026a0) } else { //002678 206e fffc MOVE.L -4(A6),A0 //00267c 7000 MOVEQ.L #0,D0 //00267e 1028 0151 MOVE.B 337(A0),D0 //002682 0c40 0001 CMP.W #1,D0 //002686 6318 BLS $+26 (=0x0026a0) if (pnt_4[337] > 1) { //002688 206e fffc MOVE.L -4(A6),A0 //00268c 0c68 0001 019c CMP.W #1,412(A0) //002692 6612 BNE $+20 (=0x0026a6) if (wordGear(pnt_4+412) != 1) break; //002694 206e fffc MOVE.L -4(A6),A0 //002698 0c68 000c 019e CMP.W #12,414(A0) //00269e 6206 BHI $+8 (=0x0026a6) if (wordGear(pnt_4+414) > 12) break; }; }; //0026a0 4eba e7c2 JSR $-6204 (=0x000e64) //0026a4 601a BRA $+28 (=0x0026c0) CheckChampionNames(_1_); RETURN_i16(i16Result); }; break; };// while (false); //0026a6 486d cf8a PEA -12406(A5) //0026aa 2f2d ce8e MOVE.L -12658(A5),-(A7) //0026ae 3f3c 0008 MOVE.W #8,-(A7) //0026b2 2f2e fff4 MOVE.L -12(A6),-(A7) //0026b6 4eba ded0 JSR $-8494 (=0x000588) //0026ba 4fef 000e LEA 14(A7),A7 UtilityDialogBox(_2_, pnt_12, 8, UtilityDiskMessages[32], s12406); RETURN_i16(0); //0026be 7000 MOVEQ.L #0,D0 //0026c0 4e5e UNLK A6 //0026c2 4e75 RTS } // ********************************************************* // // ********************************************************* RESTARTABLE _TAG0026c4(pnt P1) {//(i16) static pnt pnt_8; static pnt pnt_4; RESTARTMAP RESTART(1) END_RESTARTMAP //;;;;;;;;;;;;;;;;;;;;;;;;;; //0026c4 4e56 fff8 LINK A6,#-8 //0026c8 2d6d ce86 fff8 MOVE.L -12666(A5),-8(A6) pnt_8 = UtilityDiskMessages[30]; //0026ce 206e 0008 MOVE.L 8(A6),A0 //0026d2 41e8 0026 LEA 38(A0),A0 //0026d6 2d48 fffc MOVE.L A0,-4(A6) pnt_4 = P1 + 38; //0026da 206e 0008 MOVE.L 8(A6),A0 //0026de 0c68 0002 0002 CMP.W #2,2(A0) //0026e4 6620 BNE $+34 (=0x002706) //0026e6 206e fffc MOVE.L -4(A6),A0 //0026ea 7000 MOVEQ.L #0,D0 //0026ec 1028 012d MOVE.B 301(A0),D0 //0026f0 0c40 0002 CMP.W #2,D0 //0026f4 6510 BCS $+18 (=0x002706) if ( (wordGear(P1+2) == 2) && ((UI8)(pnt_4[301]) >= 2) && (LE16(wordGear(pnt_4+378)) == 13) ) RETURN_i16(1); //0026f6 206e fffc MOVE.L -4(A6),A0 //0026fa 0c68 000d 017a CMP.W #13,378(A0) //002700 6604 BNE $+6 (=0x002706) //002702 7001 MOVEQ.L #1,D0 //002704 601a BRA $+28 (=0x002720) //002706 486d cf8a PEA -12406(A5) //00270a 2f2d ce8e MOVE.L -12658(A5),-(A7) //00270e 3f3c 0008 MOVE.W #8,-(A7) //002712 2f2e fff8 MOVE.L -8(A6),-(A7) //002716 4eba de70 JSR $-8590 (=0x000588) //00271a 4fef 000e LEA 14(A7),A7 UtilityDialogBox(_1_, pnt_8, 8, UtilityDiskMessages[32], s12406); //00271e 7000 MOVEQ.L #0,D0 RETURN_i16(0); //002720 4e5e UNLK A6 //002722 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG002724(void) { dReg D0, D6, D7; aReg A0, A1, A4; pnt pnt_8; pnt pnt_4; //;;;;;;;;;;;;;;;;;;;;;;;;;; //002724 4e56 fff8 LINK A6,#-8 //002728 48e7 0308 MOVEM.L D67A4,-(A7) //00272c 206d 9f14 MOVE.L -24812(A5),A0 //002730 41e8 1036 LEA 4150(A0),A0 //002734 2d48 fffc MOVE.L A0,-4(A6) pnt_4 = e.Pnt24812 + 4150; //002738 206d 9f14 MOVE.L -24812(A5),A0 //00273c 0c68 0002 0002 CMP.W #2,2(A0) //002742 660e BNE $+16 (=0x002752) if (wordGear(e.Pnt24812 + 2) == 2) { //002744 206d 9f14 MOVE.L -24812(A5),A0 //002748 41e8 0026 LEA 38(A0),A0 //00274c 2d48 fff8 MOVE.L A0,-8(A6) pnt_8 = e.Pnt24812 + 38; //002750 6004 BRA $+6 (=0x002756) } else { //002752 42ae fff8 CLR.L -8(A6) pnt_8 = NULL; }; //002756 4aae fff8 TST.L -8(A6) //00275a 6700 008c BEQ $+142 (=0x0027e8) if (pnt_8 != NULL) { //00275e 4878 0020 PEA 32 //002762 3f3c 0400 MOVE.W #1024,-(A7) //002766 3f3c 0400 MOVE.W #1024,-(A7) //00276a 206e fffc MOVE.L -4(A6),A0 //00276e 4868 0100 PEA 256(A0) //002772 206e fff8 MOVE.L -8(A6),A0 //002776 4868 0100 PEA 256(A0) //00277a 4ead 015a JSR 346(A5) (=0x00858c=MemoryMove) //00277e 4fef 0010 LEA 16(A7),A7 MemoryMove(pnt_8+256, pnt_4+256, 0x400, 0x400, 32); //002782 4878 0008 PEA 8 //002786 3f3c 0400 MOVE.W #1024,-(A7) //00278a 3f3c 0400 MOVE.W #1024,-(A7) //00278e 206e fffc MOVE.L -4(A6),A0 //002792 4868 0120 PEA 288(A0) //002796 206e fff8 MOVE.L -8(A6),A0 //00279a 4868 0120 PEA 288(A0) //00279e 4ead 015a JSR 346(A5) (=0x00858c=MemoryMove) //0027a2 4fef 0010 LEA 16(A7),A7 MemoryMove(pnt_8 +288, pnt_4+288, 0x400, 0x400, 8); //0027a6 206e fff8 MOVE.L -8(A6),A0 //0027aa 2028 0134 MOVE.L 308(A0),D0 //0027ae 5280 ADDQ.L #1,D0 //0027b0 206e fffc MOVE.L -4(A6),A0 //0027b4 2140 0134 MOVE.L D0,308(A0) longGear(pnt_4+308) = longGear(pnt_8+308) + 1; //0027b8 206e fff8 MOVE.L -8(A6),A0 //0027bc 7000 MOVEQ.L #0,D0 //0027be 1028 012d MOVE.B 301(A0),D0 //0027c2 0c40 0001 CMP.W #1,D0 //0027c6 660e BNE $+16 (=0x0027d6) if (pnt_8[301] == 1) { //0027c8 206e fffc MOVE.L -4(A6),A0 //0027cc 7001 MOVEQ.L #1,D0 //0027ce 3140 0178 MOVE.W D0,376(A0) ASSERT(0);//check for LE wordGear(pnt_4 + 376) = 1; //0027d2 6000 0098 BRA $+154 (=0x00286c) } else { //0027d6 206e fff8 MOVE.L -8(A6),A0 //0027da 226e fffc MOVE.L -4(A6),A1 //0027de 3368 0178 0178 MOVE.W 376(A0),376(A1) wordGear(pnt_4+376) = wordGear(pnt_8+376); }; //0027e4 6000 0086 BRA $+136 (=0x00286c) } else { //0027e8 4878 0020 PEA 32 //0027ec 3f3c 0400 MOVE.W #1024,-(A7) //0027f0 3f3c 0400 MOVE.W #1024,-(A7) //0027f4 206e fffc MOVE.L -4(A6),A0 //0027f8 4868 0100 PEA 256(A0) //0027fc 206d 9f14 MOVE.L -24812(A5),A0 //002800 4868 0126 PEA 294(A0) //002804 4ead 015a JSR 346(A5) (=0x00858c=MemoryMove) //002808 4fef 0010 LEA 16(A7),A7 MemoryMove(e.Pnt24812+294, pnt_4+256, 0x400, 0x400, 32); //00280c 4878 0008 PEA 8 //002810 3f3c 0400 MOVE.W #1024,-(A7) //002814 3f3c 0400 MOVE.W #1024,-(A7) //002818 206e fffc MOVE.L -4(A6),A0 //00281c 4868 0120 PEA 288(A0) //002820 206d 9f14 MOVE.L -24812(A5),A0 //002824 4868 0146 PEA 326(A0) //002828 4ead 015a JSR 346(A5) (=0x00858c=MemoryMove) //00282c 4fef 0010 LEA 16(A7),A7 MemoryMove(e.Pnt24812+326, pnt_4+288, 0x400, 0x400, 8); //002830 206d 9f14 MOVE.L -24812(A5),A0 //002834 2028 0158 MOVE.L 344(A0),D0 //002838 5280 ADDQ.L #1,D0 //00283a 206e fffc MOVE.L -4(A6),A0 //00283e 2140 0134 MOVE.L D0,308(A0) ASSERT(0); //check for LE longGear(pnt_4+308) = longGear(e.Pnt24812+344) + 1; //002842 206d 9f14 MOVE.L -24812(A5),A0 //002846 7000 MOVEQ.L #0,D0 //002848 1028 0151 MOVE.B 337(A0),D0 //00284c 0c40 0001 CMP.W #1,D0 //002850 660c BNE $+14 (=0x00285e) if (e.Pnt24812[337] ==1) { //002852 206e fffc MOVE.L -4(A6),A0 //002856 7001 MOVEQ.L #1,D0 //002858 3140 0178 MOVE.W D0,376(A0) ASSERT(0);//check for LE wordGear(pnt_4+376) = 1; //00285c 600e BRA $+16 (=0x00286c) } else { //00285e 206d 9f14 MOVE.L -24812(A5),A0 //002862 226e fffc MOVE.L -4(A6),A1 //002866 3368 019c 0178 MOVE.W 412(A0),376(A1) wordGear(pnt_4+376) = wordGear(e.Pnt24812+412); }; }; //00286c 2f2d d032 MOVE.L -12238(A5),-(A7) //002870 206d 9f14 MOVE.L -24812(A5),A0 //002874 4868 1014 PEA 4116(A0) //002878 4ead 018a JSR 394(A5) (=0x006520=StrCpy) //00287c 508f ADDQ.L #0,A7 StrCpy(e.Pnt24812 + 4116, pnt12238); //00287e 4878 0c80 PEA 3200 //002882 3f3c 0400 MOVE.W #1024,-(A7) //002886 3f3c 0400 MOVE.W #1024,-(A7) //00288a 206d 9f14 MOVE.L -24812(A5),A0 //00288e 4868 1314 PEA 4884(A0) //002892 206d 9f14 MOVE.L -24812(A5),A0 //002896 4868 0304 PEA 772(A0) //00289a 4ead 015a JSR 346(A5) (=0x00858c=MemoryMove) //00289e 4fef 0010 LEA 16(A7),A7 MemoryMove(e.Pnt24812+772, e.Pnt24812+4884, 0x400, 0x400, 3200); //0028a2 206d 9f14 MOVE.L -24812(A5),A0 //0028a6 316d 9f12 1240 MOVE.W -24814(A5),4672(A0) wordGear(e.Pnt24812 + 4672) = LE16(e.Word24814); //0028ac 7e00 MOVEQ.L #0,D7 //0028ae 206d 9f14 MOVE.L -24812(A5),A0 //0028b2 41e8 1314 LEA 4884(A0),A0 //0028b6 2848 MOVE.L A0,A4 //0028b8 6000 012c BRA $+302 (=0x0029e6) for (D7W=0, A4 = e.Pnt24812+4884; D7W < e.Word24814; D7W++, A4+=800) { //0028bc 206d 9f14 MOVE.L -24812(A5),A0 A0 = e.Pnt24812; //0028c0 226d 9f14 MOVE.L -24812(A5),A1 A1 = e.Pnt24812; //0028c4 3029 1246 MOVE.W 4678(A1),D0 //0028c8 9068 0236 SUB.W 566(A0),D0 //0028cc 3c00 MOVE.W D0,D6 D6W = (UI16)(LE16(wordGear(A1+4678)) - LE16(wordGear(A0+566))); //0028ce 4a40 TST.W D0 //0028d0 6722 BEQ $+36 (=0x0028f4) if (D6W != 0) { //0028d2 5846 ADDQ.W #4,D6 D6W += 4; //0028d4 7000 MOVEQ.L #0,D0 //0028d6 102c 001d MOVE.B 29(A4),D0 //0028da d046 ADD.W D6,D0 //0028dc 0240 0003 AND.W #3,D0 //0028e0 1940 001d MOVE.B D0,29(A4) A4[29] = (UI8)((A4[29] + D6W) & 3); //0028e4 7000 MOVEQ.L #0,D0 //0028e6 102c 001c MOVE.B 28(A4),D0 //0028ea d046 ADD.W D6,D0 //0028ec 0240 0003 AND.W #3,D0 //0028f0 1940 001c MOVE.B D0,28(A4) A4[28] = (UI8)((A4[28] + D6W) & 3); }; //0028f4 7001 MOVEQ.L #1,D0 //0028f6 1940 001e MOVE.B D0,30(A4) A4[30] = 1; //0028fa 7002 MOVEQ.L #2,D0 //0028fc 1940 001f MOVE.B D0,31(A4) A4[31] = 2; //002900 197c 00ff 0020 MOVE.B #-1,32(A4) A4[32] = -1; //002906 422c 0021 CLR.B 33(A4) A4[33] = 0; //00290a 422c 0022 CLR.B 34(A4) A4[34] = 0; //00290e 422c 0028 CLR.B 40(A4) A4[40] = 0; //002912 422c 0029 CLR.B 41(A4) A4[41] = 0; //002916 422c 002a CLR.B 42(A4) A4[42] = 0; //00291a 70ff MOVEQ.L #-1,D0 nmqe //00291c 3940 002c MOVE.W D0,44(A4) wordGear(A4+44) = (unsigned)0xffff; //002920 70ff MOVEQ.L #-1,D0 nmqe //002922 3940 002e MOVE.W D0,46(A4) wordGear(A4+46) = (unsigned)0xffff; //002926 026c 0010 0030 AND.W #16,48(A4) wordGear(A4+48) = LE16(LE16(wordGear(A4+48) & 16)); //00292c 426c 0032 CLR.W 50(A4) wordGear(A4+50) = 0; //002930 396c 0036 0034 MOVE.W 54(A4),52(A4) wordGear(A4+52) = wordGear(A4+54); //002936 396c 003a 0038 MOVE.W 58(A4),56(A4) wordGear(A4+56) = wordGear(A4+58); //00293c 396c 003e 003c MOVE.W 62(A4),60(A4) wordGear(A4+60) = wordGear(A4+62); //002942 426c 0040 CLR.W 64(A4) wordGear(A4+64) = 0; //002946 4eba 02d0 JSR $+722 (=0x002c18) D0W = (i16)STRandom(); //00294a 0240 00ff AND.W #255,D0 //00294e 0640 05dc ADD.W #1500,D0 D0W = sw((D0W & 255) + 1500); //002952 3940 0042 MOVE.W D0,66(A4) wordGear(A4+66) = LE16(D0W); //002956 4eba 02c0 JSR $+706 (=0x002c18) D0W = (i16)STRandom(); //00295a 0240 00ff AND.W #255,D0 //00295e 0640 05dc ADD.W #1500,D0 //002962 3940 0044 MOVE.W D0,68(A4) D0W = sw((D0W & 255) + 1500); wordGear(A4+68) = LE16(D0W); //002966 7c00 MOVEQ.L #0,D6 //002968 602c BRA $+46 (=0x002996) for (D6W=0; D6W<=6; D6W++) { //00296a 3006 MOVE.W D6,D0 //00296c c1fc 0003 MULS #3,D0 //002970 d08c ADD.L A4,D0 //002972 2040 MOVE.L D0,A0 A0 = A4 + 3*D6W + 70; //002974 701e MOVEQ.L #30,D0 //002976 1140 0048 MOVE.B D0,72(A0) A0[2] = 30; //00297a 3006 MOVE.W D6,D0 //00297c c1fc 0003 MULS #3,D0 //002980 d08c ADD.L A4,D0 //002982 3206 MOVE.W D6,D1 //002984 c3fc 0003 MULS #3,D1 //002988 d28c ADD.L A4,D1 //00298a 2041 MOVE.L D1,A0 //00298c 2240 MOVE.L D0,A1 //00298e 1368 0046 0047 MOVE.B 70(A0),71(A1) A0[1] = A0[0]; // //002994 5246 ADDQ.W #1,D6 // //002996 0c46 0006 CMP.W #6,D6 //00299a 6fce BLE $-48 (=0x00296a) }; //00299c 700a MOVEQ.L #10,D0 //00299e 1940 0048 MOVE.B D0,72(A4) A4[72] = 10; //0029a2 7c00 MOVEQ.L #0,D6 //0029a4 6010 BRA $+18 (=0x0029b6) for (D6W=0; D6W<20; D6W++) { //0029a6 3006 MOVE.W D6,D0 //0029a8 5246 ADDQ.W #1,D6 //0029aa c1fc 0006 MULS #6,D0 //0029ae d08c ADD.L A4,D0 //0029b0 2040 MOVE.L D0,A0 A0 = A4 + 6*D6W + 92; //0029b2 4268 005c CLR.W 92(A0) wordGear(A0) = 0; //0029b6 0c46 0014 CMP.W #20,D6 //0029ba 6dea BLT $-20 (=0x0029a6) }; //0029bc 7c00 MOVEQ.L #0,D6 //0029be 6012 BRA $+20 (=0x0029d2) for (D6W=0; D6W<30; D6W++) { //possessions <- empty //0029c0 3006 MOVE.W D6,D0 //0029c2 5246 ADDQ.W #1,D6 //0029c4 48c0 EXT.L D0 //0029c6 d080 ADD.L D0,D0 //0029c8 d08c ADD.L A4,D0 //0029ca 2040 MOVE.L D0,A0 A0 = A4 + 2*D6W + 212; //0029cc 317c ffff 00d4 MOVE.W #65535,212(A0) wordGear(A0) = (unsigned)0xffff; //0029d2 0c46 001e CMP.W #30,D6 //0029d6 6de8 BLT $-22 (=0x0029c0) }; //0029d8 426c 0110 CLR.W 272(A4) wordGear(A4+272) = 0; //0029dc 426c 0112 CLR.W 274(A4) wordGear(A4+274) = 0; // //0029e0 5247 ADDQ.W #1,D7 //0029e2 49ec 0320 LEA 800(A4),A4 // //0029e6 be6d 9f12 CMP.W -24814(A5),D7 //0029ea 6d00 fed0 BLT $-302 (=0x0028bc) }; //0029ee 4cdf 10c0 MOVEM.L (A7)+,D67A4 //0029f2 4e5e UNLK A6 //0029f4 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG002a38 RESTARTABLE _StartChaos(const CSB_UI_MESSAGE *) {//(void) static i16 w_130; RESTARTMAP RESTART(1) RESTART(2) RESTART(3) RESTART(4) END_RESTARTMAP //;; This is the main program //;;;;;;;;;;Does something and then reads a gamefile and then //;;;;;;;;;;does something else. //;;;;;;;;;;Calls function that reads gamefile, fiddles with //;;;;;;;;;;characters and writes gamefile. //002a38 4e56 ff7e LINK A6,#-130 //002a3c 7001 MOVEQ.L #1,D0 //002a3e 3d40 ff7e MOVE.W D0,-130(A6) keyboardMode = 2; InitializeE(); w_130 = 1; // What sense does this make????? //002a42 0c6e 0002 ff7e CMP.W #2,-130(A6) //002a48 6660 BNE $+98 (=0x002aaa) if (w_130 == 2) { NotImplemented(0x2a4a); //002a4a 4eba ffca JSR $-52 (=0x002a16) //002a4e 3f00 MOVE.W D0,-(A7) //002a50 486d dbd4 PEA -9260(A5) //002a54 486e ff80 PEA -128(A6) //002a58 4ead 017a JSR 378(A5) (=0x0065e0) //002a5c 4fef 000a LEA 10(A7),A7 //002a60 486e ff80 PEA -128(A6) //002a64 3f3c 0009 MOVE.W #9,-(A7) //002a68 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //002a6c 5c8f ADDQ.L #6,A7 //002a6e 4eba ff86 JSR $-120 (=0x0029f6) //002a72 3f00 MOVE.W D0,-(A7) //002a74 486d dbe8 PEA -9240(A5) //002a78 486e ff80 PEA -128(A6) //002a7c 4ead 017a JSR 378(A5) (=0x0065e0) //002a80 4fef 000a LEA 10(A7),A7 //002a84 486e ff80 PEA -128(A6) //002a88 3f3c 0009 MOVE.W #9,-(A7) //002a8c 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //002a90 5c8f ADDQ.L #6,A7 //002a92 3f3c 0007 MOVE.W #7,-(A7) //002a96 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //002a9a 548f ADDQ.L #2,A7 //002a9c 0c40 0021 CMP.W #33,D0 //002aa0 6708 BEQ $+10 (=0x002aaa) //002aa2 4267 CLR.W -(A7) //002aa4 4ead 008a JSR 138(A5) (=0x005c7c) //002aa8 548f ADDQ.L #2,A7 }; //002aaa 486d d546 PEA -10938(A5) //002aae 4eba 1f82 JSR $+8068 (=0x004a32) //002ab2 588f ADDQ.L #4,A7 FadeToPalette(_1_,&e.palette10938); //002ab4 4eba d81a JSR $-10212 (=0x0002d0) TAG0002d0(); //002ab8 4267 CLR.W -(A7) //002aba 4eba 06ea JSR $+1772 (=0x0031a6) //002abe 548f ADDQ.L #2,A7 TAG0031a6(0); //002ac0 3f3c 0002 MOVE.W #2,-(A7) //002ac4 4ead 0092 JSR 146(A5) (=0x005c50) //002ac8 548f ADDQ.L #2,A7 //002aca 2b40 e08c MOVE.L D0,-8052(A5) e.PhysicalBase = physbase(); SetDLogicalBase(e.PhysicalBase); //002ace 3f2d dc5c MOVE.W -9124(A5),-(A7) //002ad2 3f3c 0001 MOVE.W #1,-(A7) //002ad6 4eba 07dc JSR $+2014 (=0x0032b4) //002ada 588f ADDQ.L #4,A7 TAG0032b4(1, e.Word9124); //002adc 4267 CLR.W -(A7) //002ade 3f2d dc5c MOVE.W -9124(A5),-(A7) //002ae2 4eba 07b0 JSR $+1970 (=0x003294) //002ae6 588f ADDQ.L #4,A7 TAG003294(e.Word9124, 0); //002ae8 3f3c 0001 MOVE.W #1,-(A7) //002aec 4eba d73c JSR $-10434 (=0x00022a) //002af0 548f ADDQ.L #2,A7 TAG00022a(1); //002af2 4eba dbf0 JSR $-9230 (=0x0006e4) TAG0006e4(); // Set critical error handler //002af6 4eba 0754 JSR $+1878 (=0x00324c) TAG00324c(); //002afa 4878 7d00 PEA 32000 //002afe 2f2d e08c MOVE.L -8052(A5),-(A7) //002b02 4ead 012a JSR 298(A5) (=0x0086a8=ClearMemory) //002b06 508f ADDQ.L #0,A7 ClearMemory(e.PhysicalBase, 32000); //002b08 4eba 075a JSR $+1884 (=0x003264) TAG003264(); //002b0c 486d 9ee2 PEA -24862(A5) //002b10 4eba 1f20 JSR $+7970 (=0x004a32) //002b14 588f ADDQ.L #4,A7 FadeToPalette(_2_,&palette24862); //002b16 4878 2020 PEA 8224 //002b1a 4eba d80c JSR $-10226 (=0x000328) //002b1e 588f ADDQ.L #4,A7 //002b20 2b40 9f14 MOVE.L D0,-24812(A5) e.Pnt24812 = AllocateMemory(8224); //Room for two games.?? (4112 byes each) //002b24 4878 2020 PEA 8224 //002b28 2f2d 9f14 MOVE.L -24812(A5),-(A7) //002b2c 4ead 012a JSR 298(A5) (=0x0086a8=ClearMemory) //002b30 508f ADDQ.L #0,A7 ClearMemory(e.Pnt24812, 8224); //002b32 70ff MOVEQ.L #-1,D0 nmqe //002b34 3d40 ff7e MOVE.W D0,-130(A6) w_130 = -1; //002b38 600c BRA $+14 (=0x002b46) while (w_130 == -1) { //002b3a 4267 CLR.W -(A7) //002b3c 4eba ed2a JSR $-4820 (=0x001868) //002b40 548f ADDQ.L #2,A7 //002b42 3d40 ff7e MOVE.W D0,-130(A6) ReadSavedGame(_3_, 0); w_130 = i16Result; // //002b46 0c6e ffff ff7e CMP.W #65535,-130(A6) //002b4c 67ec BEQ $-18 (=0x002b3a) }; //002b4e 0c6e ff9d ff7e CMP.W #65437,-130(A6) //002b54 6704 BEQ $+6 (=0x002b5a) if (w_130 != 0xff9d) { //002b56 4eba 19c0 JSR $+6594 (=0x004518) TAG004518(_4_); }; //002b5a 4267 CLR.W -(A7) //002b5c 2f2d 9f14 MOVE.L -24812(A5),-(A7) //002b60 4eba eb14 JSR $-5354 (=0x001676) //002b64 5c8f ADDQ.L #6,A7 TAG001676(e.Pnt24812, 0); //002b66 3f3c 0001 MOVE.W #1,-(A7) //002b6a 206d 9f14 MOVE.L -24812(A5),A0 //002b6e 4868 1010 PEA 4112(A0) //002b72 4eba eb02 JSR $-5372 (=0x001676) //002b76 5c8f ADDQ.L #6,A7 TAG001676(e.Pnt24812+4112, 1); //002b78 2f2d 9f14 MOVE.L -24812(A5),-(A7) //002b7c 4eba d822 JSR $-10204 (=0x0003a0) //002b80 588f ADDQ.L #4,A7 ReleaseMemory(e.Pnt24812); //002b82 4eba ddce JSR $-8752 (=0x000952) TAG000952(); //002b86 3f3c 0002 MOVE.W #2,-(A7) //002b8a 4eba d69e JSR $-10592 (=0x00022a) //002b8e 548f ADDQ.L #2,A7 TAG00022a(2); //002b90 3f2d dc5c MOVE.W -9124(A5),-(A7) //002b94 3f3c 0002 MOVE.W #2,-(A7) //002b98 4eba 071a JSR $+1820 (=0x0032b4) //002b9c 588f ADDQ.L #4,A7 TAG0032b4(2, e.Word9124); //002b9e 4eba 069c JSR $+1694 (=0x00323c) TAG00323c(); //002ba2 4eba d778 JSR $-10374 (=0x00031c) TAG00031c(); //002ba6 3abc 6160 MOVE.W #24928,(A5) //002baa 3b7c 5223 0002 MOVE.W #21027,2(A5) //002bb0 2b6d d542 001c MOVE.L -10942(A5),28(A5) //002bb6 4e5e UNLK A6 //002bb8 4e75 RTS RETURN; } // ********************************************************* // // ********************************************************* // TAG002c18 //i16 Random(void) //{ // dReg D0; //;;;;;;;;;;;;;;;;; //002c18 4aad dbfc TST.L -9220(A5) //002c1c 660e BNE $+16 (=0x002c2c) // if (e.Long9220 == 0) // { //002c1e 202d a114 MOVE.L -24300(A5),D0 //002c22 0680 000f 9c25 ADD.L #1023013,D0 //002c28 2b40 dbfc MOVE.L D0,-9220(A5) // e.Long9220 = e.Long24300 + 1023013; // }; //002c2c 2f2d dbfc MOVE.L -9220(A5),-(A7) //002c30 4879 0004 cb2f PEA 314159 //002c36 4ead 0042 JSR 66(A5) (=0x0000d6) // D0L = Times(e.Long9220, 314159) + 11; //002c3a 0680 0000 000b ADD.L #11,D0 //002c40 2b40 dbfc MOVE.L D0,-9220(A5) // e.Long9220 = D0L; //002c44 202d dbfc MOVE.L -9220(A5),D0 //002c48 e088 LSR.L #8,D0 // return (D0L >> 8) & 0xffffff; //002c4a 4e75 RTS //} // ********************************************************* // // ********************************************************* // TAG002c70 i16 TestInRectangle(wordRectPos *rect, i32 x, i32 y) { dReg D6, D7; wordRectPos *rectA4; //002c70 4e56 0000 LINK A6,#0 //002c74 48e7 0308 MOVEM.L D67A4,-(A7) //002c78 286e 0008 MOVE.L 8(A6),A4 rectA4 = rect; //002c7c 3e2e 000c MOVE.W 12(A6),D7 D7W = sw(x); //002c80 3c2e 000e MOVE.W 14(A6),D6 D6W = sw(y); //002c84 be6c 0002 CMP.W 2(A4),D7 //002c88 6e10 BGT $+18 (=0x002c9a) if (D7W > rectA4->x2) return 0; //002c8a be54 CMP.W (A4),D7 //002c8c 6d0c BLT $+14 (=0x002c9a) if (D7W < rectA4->x1) return 0; //002c8e bc6c 0006 CMP.W 6(A4),D6 //002c92 6e06 BGT $+8 (=0x002c9a) if (D6W > rectA4->y2) return 0; //002c94 bc6c 0004 CMP.W 4(A4),D6 //002c98 6c04 BGE $+6 (=0x002c9e) if (D6W < rectA4->y1) return 0; return 1; //002c9a 7000 MOVEQ.L #0,D0 //002c9c 6002 BRA $+4 (=0x002ca0) //002c9e 7001 MOVEQ.L #1,D0 //002ca0 4cdf 10c0 MOVEM.L (A7)+,D67A4 //002ca4 4e5e UNLK A6 //002ca6 4e75 RTS } // ********************************************************* // Discard any queued keystrokes // ********************************************************* void TAG002ca8(void) { //;;;;;;;;;;;;;;;;;;;;;;;;; //002ca8 600a BRA $+12 (=0x002cb4) while (UI_CONSTAT() != 0) { //002caa 3f3c 0007 MOVE.W #7,-(A7) //002cae 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //002cb2 548f ADDQ.L #2,A7 UI_DIRECT_CONIN(); //002cb4 3f3c 000b MOVE.W #11,-(A7) //002cb8 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //002cbc 548f ADDQ.L #2,A7 //002cbe 4a40 TST.W D0 //002cc0 66e8 BNE $-22 (=0x002caa) }; //002cc2 1b7c 0080 dc04 MOVE.B #-128,-9212(A5) e.Byte9212 = -128; //002cc8 426d dc00 CLR.W -9216(A5) e.FirstQueuedMouseEvent = 0; //002ccc 7004 MOVEQ.L #4,D0 //002cce 3b40 dc02 MOVE.W D0,-9214(A5) e.LastQueuedMouseEvent = 4; //002cd2 426d dc06 CLR.W -9210(A5) e.Word9210 = 0; //002cd6 422d dc04 CLR.B -9212(A5) e.Byte9212 = 0; //002cda 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG002cdc(DlgButton *P1, i32 x, i32 y, i32 leftRight) { dReg D0, D5, D6, D7; DlgButton *dlgButtonA4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //002cdc 4e56 0000 LINK A6,#0 //002ce0 48e7 0708 MOVEM.L D567A4,-(A7) //002ce4 286e 0008 MOVE.L 8(A6),A4 dlgButtonA4 = P1; //002ce8 3e2e 000c MOVE.W 12(A6),D7 D7W = sw(x); //002cec 3c2e 000e MOVE.W 14(A6),D6 D6W = sw(y); //002cf0 b8fc 0000 CMP.W #0,A4 //002cf4 6632 BNE $+52 (=0x002d28) //002cf6 7000 MOVEQ.L #0,D0 //002cf8 603a BRA $+60 (=0x002d34) if (dlgButtonA4 == NULL) return 0; while ( (D5W = dlgButtonA4->byte0) != 0) { //002cfa 3f06 MOVE.W D6,-(A7) //002cfc 3f07 MOVE.W D7,-(A7) //002cfe 486c 0002 PEA 2(A4) //002d02 4eba ff6c JSR $-146 (=0x002c70) //002d06 508f ADDQ.L #0,A7 D0W = TestInRectangle(&dlgButtonA4->rectPos2, D7W, D6W); //002d08 4a40 TST.W D0 //002d0a 6718 BEQ $+26 (=0x002d24) if (D0W != 0) { //002d0c 302e 0010 MOVE.W 16(A6),D0 //002d10 c06c 000a AND.W 10(A4),D0 //002d14 4a40 TST.W D0 //002d16 670c BEQ $+14 (=0x002d24) if (leftRight & dlgButtonA4->byte11) { //002d18 7000 MOVEQ.L #0,D0 //002d1a 102c 0001 MOVE.B 1(A4),D0 //002d1e 0800 0000 BTST 0,D0 //002d22 670e BEQ $+16 (=0x002d32) if ((dlgButtonA4->byte1 & 1) == 0) { return D5W; }; }; }; //002d24 49ec 000c LEA 12(A4),A4 dlgButtonA4++; //002d28 7000 MOVEQ.L #0,D0 //002d2a 1014 MOVE.B (A4),D0 //002d2c 3a00 MOVE.W D0,D5 //002d2e 4a40 TST.W D0 //002d30 66c8 BNE $-54 (=0x002cfa) }; //002d32 3005 MOVE.W D5,D0 //002d34 4cdf 10e0 MOVEM.L (A7)+,D567A4 //002d38 4e5e UNLK A6 //002d3a 4e75 RTS return D5W; } // ********************************************************* // // ********************************************************* // TAG002d3c void EnqueMouseClick(i32 P1,i32 P2,i32 P3) { dReg D0, D4, D5, D6, D7; aReg A0; S12406 **pS12406A4; i16 w_2; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //002d3c 4e56 fffe LINK A6,#-2 //002d40 48e7 0f08 MOVEM.L D4567A4,-(A7) //002d44 3e2e 0008 MOVE.W 8(A6),D7 D7W = sw(P1); //002d48 3c2e 000a MOVE.W 10(A6),D6 D6W = sw(P2); //002d4c 4aed dc04 TAS -9212(A5) //002d50 6718 BEQ $+26 (=0x002d6a) if (e.Byte9212 != 0) { // Que is busy. Put click in pending state. //002d52 7001 MOVEQ.L #1,D0 //002d54 3b40 dc06 MOVE.W D0,-9210(A5) e.Word9210 = 1; //002d58 3b47 dc08 MOVE.W D7,-9208(A5) e.Word9208 = D7W; //002d5c 3b46 dc0a MOVE.W D6,-9206(A5) e.Word9206 = D6W; //002d60 3b6e 000c dc0c MOVE.W 12(A6),-9204(A5) e.Word9204 = sw(P3); //002d66 6000 00bc BRA $+190 (=0x002e24) return; }; //002d6a 302d dc02 MOVE.W -9214(A5),D0 //002d6e 5440 ADDQ.W #2,D0 //002d70 3a00 MOVE.W D0,D5 D5W = sw(e.LastQueuedMouseEvent + 2); //002d72 0c40 0004 CMP.W #4,D0 //002d76 6f02 BLE $+4 (=0x002d7a) //002d78 5b45 SUBQ.W #5,D5 if (D5W > 4) D5W -= 5; //002d7a ba6d dc00 CMP.W -9216(A5),D5 //002d7e 6700 00a4 BEQ $+166 (=0x002e24) if (D5W == e.FirstQueuedMouseEvent) return; //002d82 426e fffe CLR.W -2(A6) //002d86 286d dc4a MOVE.L -9142(A5),A4 //002d8a 6000 008a BRA $+140 (=0x002e16) for (w_2 = 0, pS12406A4 = ppS12406_9142; w_2 < 6; w_2++, pS12406A4++) { //002d8e 4a94 TST.L (A4) //002d90 6700 007e BEQ $+128 (=0x002e10) if (*pS12406A4 == NULL) continue; //002d94 2054 MOVE.L (A4),A0 //002d96 7000 MOVEQ.L #0,D0 //002d98 1028 0001 MOVE.B 1(A0),D0 //002d9c 0800 0000 BTST 0,D0 //002da0 6600 006e BNE $+112 (=0x002e10) if ((*pS12406A4)->byte1 & 1) continue; //002da4 3f2e 000c MOVE.W 12(A6),-(A7) //002da8 3f06 MOVE.W D6,-(A7) //002daa 3f07 MOVE.W D7,-(A7) //002dac 2054 MOVE.L (A4),A0 //002dae 2f28 0002 MOVE.L 2(A0),-(A7) //002db2 4eba ff28 JSR $-214 (=0x002cdc) //002db6 4fef 000a LEA 10(A7),A7 //002dba 3800 MOVE.W D0,D4 D4W = TAG002cdc((*pS12406A4)->pDlgButton2, D7W, D6W, P3); //002dbc 4a40 TST.W D0 //002dbe 6750 BEQ $+82 (=0x002e10) if (D4W == 0) continue; //002dc0 3005 MOVE.W D5,D0 D0W = D5W; //002dc2 5345 SUBQ.W #1,D5 D5W--; //002dc4 4a40 TST.W D0 //002dc6 6602 BNE $+4 (=0x002dca) //002dc8 7a04 MOVEQ.L #4,D5 if (D0W == 0) D5W = 4; //002dca 3b45 dc02 MOVE.W D5,-9214(A5) e.LastQueuedMouseEvent = D5W; //Last item in queue //002dce 3005 MOVE.W D5,D0 //002dd0 c1fc 0006 MULS #6,D0 //002dd4 41ed dc0e LEA -9202(A5),A0 //002dd8 d1c0 ADD.L D0,A0 A0 = e.Byte9202 + 6*D5W; //002dda 1084 MOVE.B D4,(A0) A0[0] = D4B; //002ddc 3005 MOVE.W D5,D0 //002dde c1fc 0006 MULS #6,D0 //002de2 41ed dc0e LEA -9202(A5),A0 //002de6 d1c0 ADD.L D0,A0 //002de8 116e ffff 0001 MOVE.B -1(A6),1(A0) A0[1] = (i8)w_2; //002dee 3005 MOVE.W D5,D0 //002df0 c1fc 0006 MULS #6,D0 //002df4 41ed dc0e LEA -9202(A5),A0 //002df8 d1c0 ADD.L D0,A0 //002dfa 3147 0002 MOVE.W D7,2(A0) wordGear(A0+2) = D7W; //002dfe 3005 MOVE.W D5,D0 //002e00 c1fc 0006 MULS #6,D0 //002e04 41ed dc0e LEA -9202(A5),A0 //002e08 d1c0 ADD.L D0,A0 //002e0a 3146 0004 MOVE.W D6,4(A0) wordGear(A0+4) = D6W; //002e0e 6010 BRA $+18 (=0x002e20) break; // //002e10 526e fffe ADDQ.W #1,-2(A6) //002e14 588c ADDQ.L #4,A4 // //002e16 0c6e 0006 fffe CMP.W #6,-2(A6) //002e1c 6d00 ff70 BLT $-142 (=0x002d8e) }; //002e20 422d dc04 CLR.B -9212(A5) e.Byte9212 = 0; //002e24 4cdf 10f0 MOVEM.L (A7)+,D4567A4 //002e28 4e5e UNLK A6 //002e2a 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG002e2c void CheckPendingMouseClick(void) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //002e2c 4a6d dc06 TST.W -9210(A5) //002e30 6716 BEQ $+24 (=0x002e48) if (e.Word9210 == 0) return; //002e32 426d dc06 CLR.W -9210(A5) e.Word9210 = 0; //002e36 3f2d dc0c MOVE.W -9204(A5),-(A7) //002e3a 3f2d dc0a MOVE.W -9206(A5),-(A7) //002e3e 3f2d dc08 MOVE.W -9208(A5),-(A7) //002e42 4eba fef8 JSR $-262 (=0x002d3c) //002e46 5c8f ADDQ.L #6,A7 EnqueMouseClick(e.Word9208, e.Word9206, e.Word9204); //002e48 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG002e4a(i32 P1) { dReg D0, D1, D4, D5, D6, D7; aReg A0, A3; S12406 **pS12406A4; i16 w_4 = 0x1ccc; i16 w_2; //;;;;;;;;;;;;;;;;;;;;;;;;; //002e4a 4e56 fffc LINK A6,#-4 //002e4e 48e7 0f18 MOVEM.L D4567A34,-(A7) //002e52 2e2e 0008 MOVE.L 8(A6),D7 D7L = P1; //002e56 4a47 TST.W D7 //002e58 6604 BNE $+6 (=0x002e5e) if (D7W == 0) { //002e5a e087 ASR.L #8,D7 D7L >>= 8; //002e5c 604a BRA $+76 (=0x002ea8) } else { //002e5e 203c 0000 00ff MOVE.L #255,D0 //002e64 c087 AND.L D7,D0 //002e66 2207 MOVE.L D7,D1 D0L = D7L & 0xff; //002e68 e081 ASR.L #8,D1 //002e6a 0281 0000 ff00 AND.L #65280,D1 D1L = D7L >> 8 & 0xff00; //002e70 8081 OR.L D1,D0 //002e72 3800 MOVE.W D0,D4 D4W = sw(D0W | D1W); // UpperHalf,LowerHalf in D4 //002e74 7a00 MOVEQ.L #0,D5 //002e76 601a BRA $+28 (=0x002e92) for (D5L=0; (D5L<7) && (D4W>=word9138[D5W]); D5W++) { //002e78 3005 MOVE.W D5,D0 //002e7a 48c0 EXT.L D0 //002e7c d080 ADD.L D0,D0 //002e7e 41ed dc4e LEA -9138(A5),A0 //002e82 d1c0 ADD.L D0,A0 //002e84 b850 CMP.W (A0),D4 //002e86 6608 BNE $+10 (=0x002e90) if (D4W != word9138[D5W]) continue; //002e88 7000 MOVEQ.L #0,D0 //002e8a 3004 MOVE.W D4,D0 //002e8c 2e00 MOVE.L D0,D7 D7L = D4UW; //002e8e 6018 BRA $+26 (=0x002ea8) break; //002e90 5245 ADDQ.W #1,D5 // //002e92 0c45 0007 CMP.W #7,D5 //002e96 6c10 BGE $+18 (=0x002ea8) // //002e98 3005 MOVE.W D5,D0 //002e9a 48c0 EXT.L D0 //002e9c d080 ADD.L D0,D0 //002e9e 41ed dc4e LEA -9138(A5),A0 //002ea2 d1c0 ADD.L D0,A0 //002ea4 b850 CMP.W (A0),D4 //002ea6 64d0 BCC $-46 (=0x002e78) }; }; //002ea8 1b7c 0080 dc04 MOVE.B #-128,-9212(A5) e.Byte9212 = -128; //002eae 302d dc02 MOVE.W -9214(A5),D0 //002eb2 5440 ADDQ.W #2,D0 //002eb4 3c00 MOVE.W D0,D6 D6W = sw(e.LastQueuedMouseEvent + 2); //002eb6 0c40 0004 CMP.W #4,D0 //002eba 6f02 BLE $+4 (=0x002ebe) //002ebc 5b46 SUBQ.W #5,D6 if (D6W > 4) D6W -= 5; //002ebe bc6d dc00 CMP.W -9216(A5),D6 //002ec2 6700 00d6 BEQ $+216 (=0x002f9a) if (D6W != e.FirstQueuedMouseEvent) { //002ec6 426e fffe CLR.W -2(A6) w_2 = 0; //002eca 7a00 MOVEQ.L #0,D5 //002ecc 286d dc4a MOVE.L -9142(A5),A4 //002ed0 6000 00ae BRA $+176 (=0x002f80) for (D5L=0, pS12406A4 = ppS12406_9142; D5W < 6; D5W++, pS12406A4++) { //002ed4 4a94 TST.L (A4) //002ed6 6700 00a4 BEQ $+166 (=0x002f7c) if (*pS12406A4 == NULL) continue; //002eda 2054 MOVE.L (A4),A0 //002edc 7000 MOVEQ.L #0,D0 //002ede 1028 0001 MOVE.B 1(A0),D0 //002ee2 0800 0000 BTST 0,D0 //002ee6 6600 0094 BNE $+150 (=0x002f7c) if ((*pS12406A4)->byte1 & 1) continue; //002eea 2054 MOVE.L (A4),A0 //002eec 2668 0006 MOVE.L 6(A0),A3 //002ef0 b6fc 0000 CMP.W #0,A3 A3 = (*pS12406A4)->pnt6; //002ef4 6600 007c BNE $+126 (=0x002f72) //002ef8 6000 0082 BRA $+132 (=0x002f7c) if (A3 == NULL) continue; for ( ; (D4W = sw(A3[0]&255)) != 0; A3+=4) { //002efc 7000 MOVEQ.L #0,D0 //002efe 102b 0001 MOVE.B 1(A3),D0 //002f02 0800 0000 BTST 0,D0 //002f06 6600 0068 BNE $+106 (=0x002f70) if (A3[1] & 1) continue; //002f0a be6b 0002 CMP.W 2(A3),D7 //002f0e 6650 BNE $+82 (=0x002f60) if (wordGear(A3+2) == D7W) { tag002f10: //002f10 3006 MOVE.W D6,D0 D0W = D6W; //002f12 5346 SUBQ.W #1,D6 D6W--; //002f14 4a40 TST.W D0 //002f16 6602 BNE $+4 (=0x002f1a) if (D0W == 0) D6W = 4; //002f18 7c04 MOVEQ.L #4,D6 //002f1a 3b46 dc02 MOVE.W D6,-9214(A5) e.LastQueuedMouseEvent = D6W; //002f1e 3006 MOVE.W D6,D0 //002f20 c1fc 0006 MULS #6,D0 //002f24 41ed dc0e LEA -9202(A5),A0 //002f28 d1c0 ADD.L D0,A0 A0 = e.Byte9202+6*D6W; //002f2a 1084 MOVE.B D4,(A0) A0[0] = D4B; //002f2c 3006 MOVE.W D6,D0 //002f2e c1fc 0006 MULS #6,D0 //002f32 41ed dc0e LEA -9202(A5),A0 //002f36 d1c0 ADD.L D0,A0 //002f38 1145 0001 MOVE.B D5,1(A0) A0[1] = D5B; //002f3c 3006 MOVE.W D6,D0 //002f3e c1fc 0006 MULS #6,D0 //002f42 41ed dc0e LEA -9202(A5),A0 //002f46 d1c0 ADD.L D0,A0 //002f48 70ff MOVEQ.L #-1,D0 nmqe //002f4a 3140 0002 MOVE.W D0,2(A0) wordGear(A0+2) = (ui16)-1; //002f4e 3006 MOVE.W D6,D0 //002f50 c1fc 0006 MULS #6,D0 //002f54 41ed dc0e LEA -9202(A5),A0 //002f58 d1c0 ADD.L D0,A0 //002f5a 3147 0004 MOVE.W D7,4(A0) wordGear(A0+4) = D7W; //002f5e 603a BRA $+60 (=0x002f9a) goto tag002f9a; }; //002f60 0c6b ffff 0002 CMP.W #65535,2(A3) //002f66 6608 BNE $+10 (=0x002f70) if (wordGear(A3+2) == -1) { //002f68 3d44 fffe MOVE.W D4,-2(A6) w_2 = D4W; //002f6c 3d45 fffc MOVE.W D5,-4(A6) w_4 = D5W; }; // //002f70 588b ADDQ.L #4,A3 // //002f72 7000 MOVEQ.L #0,D0 //002f74 1013 MOVE.B (A3),D0 //002f76 3800 MOVE.W D0,D4 //002f78 4a40 TST.W D0 //002f7a 6680 BNE $-126 (=0x002efc) }; //002f7c 5245 ADDQ.W #1,D5 //002f7e 588c ADDQ.L #4,A4 // //002f80 0c45 0006 CMP.W #6,D5 //002f84 6d00 ff4e BLT $-176 (=0x002ed4) }; //002f88 4a6e fffe TST.W -2(A6) //002f8c 670c BEQ $+14 (=0x002f9a) if (w_2 != 0) { //002f8e 382e fffe MOVE.W -2(A6),D4 D4W = w_2; //002f92 3a2e fffc MOVE.W -4(A6),D5 ASSERT(w_4 != 0x1ccc); D5W = w_4; //002f96 6000 ff78 BRA $-134 (=0x002f10) goto tag002f10; }; }; tag002f9a: //002f9a 422d dc04 CLR.B -9212(A5) e.Byte9212 = 0; //002f9e 4eba fe8c JSR $-370 (=0x002e2c) CheckPendingMouseClick(); //002fa2 4cdf 18f0 MOVEM.L (A7)+,D4567A34 //002fa6 4e5e UNLK A6 //002fa8 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG002faa(S12406 *P1) { dReg D7; S12406 **pS12406A4; //;;;;;;;;;;;;;;;;;;;;;;;;; //002faa 4e56 0000 LINK A6,#0 //002fae 48e7 0108 MOVEM.L D7A4,-(A7) //002fb2 7e00 MOVEQ.L #0,D7 //002fb4 286d dc4a MOVE.L -9142(A5),A4 //002fb8 6014 BRA $+22 (=0x002fce) for (D7W=0, pS12406A4=ppS12406_9142; D7W<6; D7W++, pS12406A4++) { //002fba 4a94 TST.L (A4) //002fbc 660c BNE $+14 (=0x002fca) if (*pS12406A4 != NULL) continue; //002fbe 28ae 0008 MOVE.L 8(A6),(A4) *pS12406A4 = P1; //002fc2 4eba fce4 JSR $-794 (=0x002ca8) TAG002ca8(); //002fc6 3007 MOVE.W D7,D0 //002fc8 600c BRA $+14 (=0x002fd6) return D7W; //002fca 588c ADDQ.L #4,A4 //002fcc 5247 ADDQ.W #1,D7 // //002fce 0c47 0006 CMP.W #6,D7 //002fd2 6de6 BLT $-24 (=0x002fba) }; //002fd4 70ff MOVEQ.L #-1,D0 nmqe return -1; //002fd6 4cdf 1080 MOVEM.L (A7)+,D7A4 //002fda 4e5e UNLK A6 //002fdc 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG003000 S12406 **SetActiveDialog(S12406 **P1) { S12406 **ppS12406_4; //;;;;;;;;;;;;;;;;;;;;;;;;;; //003000 4e56 fffc LINK A6,#-4 //003004 2d6d dc4a fffc MOVE.L -9142(A5),-4(A6) ppS12406_4 = ppS12406_9142; //00300a 2b6e 0008 dc4a MOVE.L 8(A6),-9142(A5) ppS12406_9142 = P1; //003010 4eba fc96 JSR $-872 (=0x002ca8) TAG002ca8(); //003014 202e fffc MOVE.L -4(A6),D0 return ppS12406_4; //003018 4e5e UNLK A6 //00301a 4e75 RTS } // ********************************************************* // // ********************************************************* RESTARTABLE _TAG00301c(pnt P1) {//(i16) static dReg D0, D7; static S12406 *S12406A0; static aReg A0, A1, A3, A4; static i32 pressed_key; RESTARTMAP RESTART(1) END_RESTARTMAP //;;;;;;;;;;;;;;;;;;;;;; //00301c 4e56 0000 LINK A6,#0 //003020 48e7 0118 MOVEM.L D7A34,-(A7) //003024 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //003028 6012 BRA $+20 (=0x00303c) //while (pumper(), wvbl(), CONSTAT() != 0) for (;;) { wvbl(_1_); if (UI_CONSTAT() == 0) break; //00302a 3f3c 0007 MOVE.W #7,-(A7) //00302e 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //003032 548f ADDQ.L #2,A7 pressed_key = UI_DIRECT_CONIN(); TAG002e4a(pressed_key); if(pressed_key) EditCharacterName((char)pressed_key); //003034 2f00 MOVE.L D0,-(A7) //003036 4eba fe12 JSR $-492 (=0x002e4a) //00303a 588f ADDQ.L #4,A7 //00303c 3f3c 000b MOVE.W #11,-(A7) //003040 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //003044 548f ADDQ.L #2,A7 //003046 4a40 TST.W D0 //003048 66e0 BNE $-30 (=0x00302a) }; //00304a 1b7c 0080 dc04 MOVE.B #-128,-9212(A5) e.Byte9212 = -128; //003050 302d dc02 MOVE.W -9214(A5),D0 //003054 5240 ADDQ.W #1,D0 //003056 3e00 MOVE.W D0,D7 D7W = sw(e.LastQueuedMouseEvent + 1); //003058 0c40 0004 CMP.W #4,D0 //00305c 6302 BLS $+4 (=0x003060) //00305e 7e00 MOVEQ.L #0,D7 if (D7W > 4) D7W = 0; //003060 be6d dc00 CMP.W -9216(A5),D7 //003064 660c BNE $+14 (=0x003072) if (D7W == e.FirstQueuedMouseEvent) { // Means queue is empty //003066 41d4 LEA (A4),A0 A0 = A4; //003068 43ed dc2c LEA -9172(A5),A1 A1 = e.Byte9172; //00306c 20d9 MOVE.L (A1)+,(A0)+ longGear(A0) = longGear(A1); //00306e 30d9 MOVE.W (A1)+,(A0)+ wordGear(A0+4) = wordGear(A1+4); A0 += 6; A1 += 6; //003070 6024 BRA $+38 (=0x003096) } else { //003072 302d dc00 MOVE.W -9216(A5),D0 //003076 c1fc 0006 MULS #6,D0 //00307a 41ed dc0e LEA -9202(A5),A0 //00307e d1c0 ADD.L D0,A0 A0 = &e.Byte9202[6*e.FirstQueuedMouseEvent]; //003080 43d4 LEA (A4),A1 A1 = A4; //003082 22d8 MOVE.L (A0)+,(A1)+ //003084 32d8 MOVE.W (A0)+,(A1)+ longGear(A1) = longGear(A0); wordGear(A1+4) = wordGear(A0+4); //003086 526d dc00 ADDQ.W #1,-9216(A5) e.FirstQueuedMouseEvent++; //00308a 0c6d 0004 dc00 CMP.W #4,-9216(A5) //003090 6f04 BLE $+6 (=0x003096) //003092 426d dc00 CLR.W -9216(A5) if (e.FirstQueuedMouseEvent > 4) e.FirstQueuedMouseEvent = 0; }; //003096 422d dc04 CLR.B -9212(A5) e.Byte9212 = 0; //00309a 4eba fd90 JSR $-622 (=0x002e2c) CheckPendingMouseClick(); //00309e 7000 MOVEQ.L #0,D0 //0030a0 1014 MOVE.B (A4),D0 //0030a2 4a40 TST.W D0 //0030a4 673e BEQ $+64 (=0x0030e4) if (*A4 != 0) { //0030a6 7000 MOVEQ.L #0,D0 //0030a8 102c 0001 MOVE.B 1(A4),D0 //0030ac 3e00 MOVE.W D0,D7 D7W = (UI8)(A4[1]); //0030ae 4840 SWAP D0 //0030b0 4240 CLR.W D0 //0030b2 4840 SWAP D0 //0030b4 e580 ASL.L #2,D0 //0030b6 d0ad dc4a ADD.L -9142(A5),D0 //0030ba 2040 MOVE.L D0,A0 //0030bc 2050 MOVE.L (A0),A0 S12406A0 = ppS12406_9142[D7W]; //0030be 1950 0001 MOVE.B (A0),1(A4) A4[1] = S12406A0->byte0; //0030c2 3007 MOVE.W D7,D0 //0030c4 4840 SWAP D0 //0030c6 4240 CLR.W D0 //0030c8 4840 SWAP D0 //0030ca e580 ASL.L #2,D0 //0030cc d0ad dc4a ADD.L -9142(A5),D0 //0030d0 2040 MOVE.L D0,A0 //0030d2 2050 MOVE.L (A0),A0 S12406A0 = ppS12406_9142[D7W]; //0030d4 2668 000a MOVE.L 10(A0),A3 A3 = S12406A0->pnt10; //0030d8 b6fc 0000 CMP.W #0,A3 //0030dc 6706 BEQ $+8 (=0x0030e4) if (A3 != NULL) { //0030de 2f0c MOVE.L A4,-(A7) //0030e0 4e93 JSR (A3) //0030e2 588f ADDQ.L #4,A7 NotImplemented(0x30e0);; //What to do here? //(A3)(A4); }; }; //0030e4 7000 MOVEQ.L #0,D0 //0030e6 1014 MOVE.B (A4),D0 //0030e8 4a40 TST.W D0 //0030ea 6604 BNE $+6 (=0x0030f0) //0030ec 422c 0001 CLR.B 1(A4) if (A4[0] == 0) A4[1] =0; //0030f0 7000 MOVEQ.L #0,D0 //0030f2 102c 0001 MOVE.B 1(A4),D0 //0030f6 e148 LSL.W #8,D0 //0030f8 7200 MOVEQ.L #0,D1 //0030fa 1214 MOVE.B (A4),D1 //0030fc 8041 OR.W D1,D0 RETURN_i16 ( (UI16)(((A4[1]<<8)&0xff00) | (A4[0]&0xff)) ); //0030fe 4cdf 1880 MOVEM.L (A7)+,D7A34 //003102 4e5e UNLK A6 //003104 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG003106(i16) { NotImplemented(0x3106); } // ********************************************************* // // ********************************************************* void TAG0031a6(i16 P1) { i16 w_138[57]; i16 w_24[10]; i16 w_4; i16 w_2; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //0031a6 4e56 ff76 LINK A6,#-138 //0031aa 4ead 00ea JSR 234(A5) (=0x00507e) TAG00507e(); //0031ae 486e fffe PEA -2(A6) //0031b2 486e fffe PEA -2(A6) //0031b6 486e fffe PEA -2(A6) //0031ba 486e fffe PEA -2(A6) //0031be 4ead 00fa JSR 250(A5) (=0x005868) //0031c2 4fef 0010 LEA 16(A7),A7 //0031c6 3b40 dc5c MOVE.W D0,-9124(A5) e.Word9124 = TAG005868(&w_2, &w_2, &w_2, &w_2); //0031ca 426e fffe CLR.W -2(A6) //0031ce 6016 BRA $+24 (=0x0031e6) for (w_2=0; w_2<10; w_2++) { //0031d0 302e fffe MOVE.W -2(A6),D0 //0031d4 526e fffe ADDQ.W #1,-2(A6) //0031d8 48c0 EXT.L D0 //0031da d080 ADD.L D0,D0 //0031dc d08e ADD.L A6,D0 //0031de 2040 MOVE.L D0,A0 w_24[w_2] = 1; //0031e0 7001 MOVEQ.L #1,D0 //0031e2 3140 ffe8 MOVE.W D0,-24(A0) // //0031e6 0c6e 000a fffe CMP.W #10,-2(A6) //0031ec 6de2 BLT $-28 (=0x0031d0) }; //0031ee 7002 MOVEQ.L #2,D0 //0031f0 3d40 fffc MOVE.W D0,-4(A6) w_4 = 2; //0031f4 4a6e 0008 TST.W 8(A6) //0031f8 6616 BNE $+24 (=0x003210) if (P1 == 0) { //0031fa 486e ff76 PEA -138(A6) //0031fe 486d dc5c PEA -9124(A5) //003202 486e ffe8 PEA -24(A6) //003206 4ead 00b2 JSR 178(A5) (=0x005d8e) //00320a 4fef 000c LEA 12(A7),A7 TAG005d8e(w_24, &e.Word9124, w_138); //00320e 6028 BRA $+42 (=0x003238) } else { //003210 3f3c 0001 MOVE.W #1,-(A7) //003214 4eba fef0 JSR $-270 (=0x003106) //003218 548f ADDQ.L #2,A7 TAG003106(1); //00321a 486e ff76 PEA -138(A6) //00321e 486d dc5c PEA -9124(A5) //003222 486e ffe8 PEA -24(A6) //003226 4ead 00a2 JSR 162(A5) (=0x005d12) //00322a 4fef 000c LEA 12(A7),A7 TAG005d12(w_24, &e.Word9124, w_138); //00322e 3f3c 0002 MOVE.W #2,-(A7) //003232 4eba fed2 JSR $-300 (=0x003106) //003236 548f ADDQ.L #2,A7 TAG003106(2); }; //003238 4e5e UNLK A6 //00323a 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG00323c(void) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //00323c 3f2d dc5c MOVE.W -9124(A5),-(A7) //003240 4ead 00aa JSR 170(A5) (=0x005df2) //003244 548f ADDQ.L #2,A7 TAG005df2(e.Word9124); //003246 4ead 00f2 JSR 242(A5) (=0x0050d2) TAG0050d2(); //00324a 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG00324c(void) { dReg D0; //;;;;;;;;;;;;;;;;;;;;; //00324c 302d e076 MOVE.W -8074(A5),D0 D0W = e.Word8074; //003250 526d e076 ADDQ.W #1,-8074(A5) e.Word8074++; //003254 4a40 TST.W D0 //003256 660a BNE $+12 (=0x003262) if (D0W == 0) { //003258 3f2d e08a MOVE.W -8054(A5),-(A7) //00325c 4ead 00ca JSR 202(A5) (=0x0061e2) //003260 548f ADDQ.L #2,A7 TAG0061e2(e.Word8054); }; //003262 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG003264(void) { dReg D0; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //003264 302d e076 MOVE.W -8074(A5),D0 D0W = e.Word8074; //003268 536d e076 SUBQ.W #1,-8074(A5) e.Word8074--; //00326c 0c40 0001 CMP.W #1,D0 //003270 660e BNE $+16 (=0x003280) if (D0W == 1) //003272 3f3c 0001 MOVE.W #1,-(A7) //003276 3f2d e08a MOVE.W -8054(A5),-(A7) //00327a 4ead 00c2 JSR 194(A5) (=0x0061ba) //00327e 588f ADDQ.L #4,A7 TAG0061ba(e.Word8054, 1); //003280 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG003294(i16 P1, i16 P2) { //;;;;;;;;;;;;;;;;;;;; //003294 4e56 0000 LINK A6,#0 //003298 3f2e 000a MOVE.W 10(A6),-(A7) //00329c 4267 CLR.W -(A7) //00329e 4ead 00e2 JSR 226(A5) (=0x00589e) //0032a2 588f ADDQ.L #4,A7 TAG00589e(0, P2); //0032a4 4267 CLR.W -(A7) //0032a6 3f2e 0008 MOVE.W 8(A6),-(A7) //0032aa 4ead 00c2 JSR 194(A5) (=0x0061ba) //0032ae 588f ADDQ.L #4,A7 TAG0061ba(P1, 0); //0032b0 4e5e UNLK A6 //0032b2 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG00334c(dReg& D0, dReg& D1) { //00334c 2f0d MOVE.L A5,-(A7) //00334e 2a7a 001e MOVE.L $+32 (=0x00336e),A5 //003352 4a6d e07e TST.W -8066(A5) //003356 670a BEQ $+12 (=0x003362) if (e.Word8066 != 0) { //003358 302d e07a MOVE.W -8070(A5),D0 //00335c 322d e07c MOVE.W -8068(A5),D1 D0W = e.Word8070; D1W = e.Word8068; //003360 6008 BRA $+10 (=0x00336a) } else { //003362 3b40 e07a MOVE.W D0,-8070(A5) //003366 3b41 e07c MOVE.W D1,-8068(A5) e.Word8070 = D0W; e.Word8068 = D1W; }; //00336a 2a5f MOVE.L (A7)+,A5 //00336c 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG003372(dReg& D0) { dReg D3; //003372 48e7 f0c4 MOVEM.L D0123A015,-(A7) //003376 2a7a fff6 MOVE.L $-8 (=0x00336e),A5 //00337a 4aed e088 TAS -8056(A5) //00337e 662a BNE $+44 (=0x0033aa) if (e.Word8056 == 0) { //003380 362d e078 MOVE.W -8072(A5),D3 D3W = e.Word8072; //003384 670a BEQ $+12 (=0x003390) //003386 4a40 TST.W D0 //003388 6706 BEQ $+8 (=0x003390) if ( (D3W != 0) && (D0W!=0) ) { //00338a 3b40 e078 MOVE.W D0,-8072(A5) e.Word8072 = D0W; //00338e 6016 BRA $+24 (=0x0033a6) } else { //003390 3b40 e078 MOVE.W D0,-8072(A5) e.Word8072 = D0W; //003394 6710 BEQ $+18 (=0x0033a6) if (D0W != 0) { //003396 3f00 MOVE.W D0,-(A7) //003398 3f2d e07c MOVE.W -8068(A5),-(A7) //00339c 3f2d e07a MOVE.W -8070(A5),-(A7) //0033a0 4eba f99a JSR $-1636 (=0x002d3c) //0033a4 5c8f ADDQ.L #6,A7 EnqueMouseClick(e.Word8070, e.Word8068, D0W); }; }; //0033a6 426d e088 CLR.W -8056(A5) e.Word8056 = 0; }; //0033aa 4cdf 230f MOVEM.L (A7)+,D0123A015 //0033ae 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG0032b4(i16 P1, i16 P2) { aReg A4; pnt pnt_10; i16 w_6; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //0032b4 4e56 fff6 LINK A6,#-10 //0032b8 2f0c MOVE.L A4,-(A7) //0032ba 41fa 00b2 LEA $+180 (=0x00336e),A0 //0032be 208d MOVE.L A5,(A0) //0032c0 302e 0008 MOVE.W 8(A6),D0 //0032c4 4ead 003a JSR 58(A5) (=0x0000ba) switch (P1) { //0032c8 0001 //0032ca 0002 //0032cc 00e4 (=0x0033b0) //0032ce 0004 (=0x0032d2) //0032d0 0050 (=0x003320) case 1: //0032d2 302e 000a MOVE.W 10(A6),D0 //0032d6 3b40 e08a MOVE.W D0,-8054(A5) e.Word8054 = P2; //0032da 486d e07c PEA -8068(A5) //0032de 486d e07a PEA -8070(A5) //0032e2 486e fffa PEA -6(A6) //0032e6 3f00 MOVE.W D0,-(A7) //0032e8 4ead 00da JSR 218(A5) (=0x006202) //0032ec 4fef 000e LEA 14(A7),A7 TAG006202(e.Word8054, &w_6, &e.Word8070, &e.Word8068); //0032f0 49fa 005a LEA $+92 (=0x00334c),A4 A4 = (pnt)0x00334c; //0032f4 486d e080 PEA -8064(A5) //0032f8 2f0c MOVE.L A4,-(A7) //0032fa 3f2d e08a MOVE.W -8054(A5),-(A7) //0032fe 4ead 00ba JSR 186(A5) (=0x00626e) //003302 4fef 000a LEA 10(A7),A7 TAG00626e(e.Word8054, A4, &e.Pnt8064); //003306 49fa 006a LEA $+108 (=0x003372),A4 A4 = (pnt)0x003372; //00330a 486d e084 PEA -8060(A5) //00330e 2f0c MOVE.L A4,-(A7) //003310 3f2d e08a MOVE.W -8054(A5),-(A7) //003314 4ead 00d2 JSR 210(A5) (=0x00623a) //003318 4fef 000a LEA 10(A7),A7 TAG00623a(e.Word8054, A4, &e.Pnt8060); //00331c 6000 0092 BRA $+148 (=0x0033b0) break; case 2: //003320 486e fff6 PEA -10(A6) //003324 2f2d e080 MOVE.L -8064(A5),-(A7) //003328 3f2d e08a MOVE.W -8054(A5),-(A7) //00332c 4ead 00ba JSR 186(A5) (=0x00626e) //003330 4fef 000a LEA 10(A7),A7 TAG00626e(e.Word8054, e.Pnt8064, &pnt_10); //003334 486e fff6 PEA -10(A6) //003338 2f2d e084 MOVE.L -8060(A5),-(A7) //00333c 3f2d e08a MOVE.W -8054(A5),-(A7) //003340 4ead 00d2 JSR 210(A5) (=0x00623a) //003344 4fef 000a LEA 10(A7),A7 TAG00623a(e.Word8054, e.Pnt8060, &pnt_10); //003348 6000 0066 BRA $+104 (=0x0033b0) break; //;;;;;;;;;;;;;;;;;;;;;;;;; //00336e 0000 0000 OR.B #0,D0 default:{}; }; //switch (P1); //0033b0 285f MOVE.L (A7)+,A4 //0033b2 4e5e UNLK A6 //0033b4 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG0033b6 void BitBltSquareImage(pnt P1,const wordRectPos *rect,i16 P3,i16 P4) { //;;;;;;;;;;;;;;; //0033b6 4e56 0000 LINK A6,#0 //0033ba 426d e090 CLR.W -8048(A5) e.Word8048 = 0; //0033be 3f2e 0012 MOVE.W 18(A6),-(A7) //0033c2 3f3c 00a0 MOVE.W #160,-(A7) //0033c6 3f2e 0010 MOVE.W 16(A6),-(A7) //0033ca 4267 CLR.W -(A7) //0033cc 4267 CLR.W -(A7) //0033ce 2f2e 000c MOVE.L 12(A6),-(A7) //0033d2 2f2d e08c MOVE.L -8052(A5),-(A7) //0033d6 2f2e 0008 MOVE.L 8(A6),-(A7) //0033da 4ead 0112 JSR 274(A5) (=0x006892=TAG0088b2) //0033de 4fef 0016 LEA 22(A7),A7 TAG0088b2(P1, e.PhysicalBase, (RectPos *)rect, 0, 0, P3, 160, P4); //0033e2 4e5e UNLK A6 //0033e4 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG0033e6 void FillScreenRectangle(wordRectPos *rp, i16 P2) { //;;;;;;;;;; //0033e6 4e56 0000 LINK A6,#0 //0033ea 3f3c 00a0 MOVE.W #160,-(A7) //0033ee 3f2e 000c MOVE.W 12(A6),-(A7) //0033f2 2f2e 0008 MOVE.L 8(A6),-(A7) //0033f6 2f2d e08c MOVE.L -8052(A5),-(A7) //0033fa 4ead 011a JSR 282(A5) (=0x00716a) //0033fe 4fef 000c LEA 12(A7),A7 FillRectangle(e.PhysicalBase, (RectPos *)rp, P2, 160); //003402 4e5e UNLK A6 //003404 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG0034dc void ExpandRectangle(wordRectPos *rp1, wordRectPos *rp2, i16 deltaX, i16 deltaY) { rp2->x1 = sw(rp1->x1 - deltaX); rp2->x2 = sw(rp1->x2 + deltaX); rp2->y1 = sw(rp1->y1 - deltaY); rp2->y2 = sw(rp1->y2 + deltaY); } // ********************************************************* // // ********************************************************* // TAG003406 void DrawNameTitleCarret(i16 P1, i16 P2) { dReg D0; wordRectPos *rectA4; //;;;;;;;;;;;;;;;;;;;; //003406 4e56 0000 LINK A6,#0 //00340a 2f0c MOVE.L A4,-(A7) //00340c 302e 0008 MOVE.W 8(A6),D0 //003410 0640 000d ADD.W #13,D0 //003414 c1fc 000c MULS #12,D0 //003418 41ed ec46 LEA -5050(A5),A0 //00341c d1c0 ADD.L D0,A0 //00341e 5488 ADDQ.L #2,A0 //003420 2848 MOVE.L A0,A4 rectA4 = &dlgButton5050[P1+13].rectPos2; //003422 3b6e 0008 ebd2 MOVE.W 8(A6),-5166(A5) //003428 3b6e 000a ebd4 MOVE.W 10(A6),-5164(A5) e.EditBoxSelected = P1; e.EditBoxPosition = P2; //00342e 4eba fe1c JSR $-482 (=0x00324c) TAG00324c(); //003432 4a6d ebd0 TST.W -5168(A5) //003436 670e BEQ $+16 (=0x003446) if (e.Word5168 != 0) { //003438 3f3c 0001 MOVE.W #1,-(A7) //00343c 486d ebc8 PEA -5176(A5) //003440 4eba ffa4 JSR $-90 (=0x0033e6=FillScreenRectangle) //003444 5c8f ADDQ.L #6,A7 FillScreenRectangle(&e.wRectPos5176, 1); }; //003446 302e 000a MOVE.W 10(A6),D0 //00344a c1fc 0006 MULS #6,D0 //00344e d054 ADD.W (A4),D0 //003450 5240 ADDQ.W #1,D0 D0W = sw(rectA4->x1 + 6*P2 + 1); //003452 3b40 ebca MOVE.W D0,-5174(A5) //003456 3b40 ebc8 MOVE.W D0,-5176(A5) e.wRectPos5176.x2 = D0W; e.wRectPos5176.x1 = D0W; //00345a 3b6c 0004 ebcc MOVE.W 4(A4),-5172(A5) //003460 3b6c 0006 ebce MOVE.W 6(A4),-5170(A5) e.wRectPos5176.y1 = rectA4->y1; e.wRectPos5176.y2 = rectA4->y2; //003466 3f3c 000f MOVE.W #15,-(A7) //00346a 486d ebc8 PEA -5176(A5) //00346e 4eba ff76 JSR $-136 (=0x0033e6=FillScreenRectangle) //003472 5c8f ADDQ.L #6,A7 FillScreenRectangle(&e.wRectPos5176, 15); //003474 4eba fdee JSR $-528 (=0x003264) TAG003264(); //003478 7001 MOVEQ.L #1,D0 //00347a 3b40 ebd0 MOVE.W D0,-5168(A5) e.Word5168 = 1; //00347e 701e MOVEQ.L #30,D0 //003480 3b40 ebc6 MOVE.W D0,-5178(A5) e.Word5178 = 30; //003484 285f MOVE.L (A7)+,A4 //003486 4e5e UNLK A6 //003488 4e75 RTS } // ********************************************************* // // ********************************************************* RESTARTABLE _TAG00352c(const wordRectPos *pRect) {//(void) static dReg D5, D6, D7; static aReg A3; const static wordRectPos *rectA4; static wordRectPos rect_8; static i32 i; RESTARTMAP RESTART(1) END_RESTARTMAP //;;;;;;;;;;;;;; //00352c 4e56 fff8 LINK A6,#-8 //003530 48e7 0718 MOVEM.L D567A34,-(A7) //003534 286e 0008 MOVE.L 8(A6),A4 rectA4 = pRect; //003538 426e fff8 CLR.W -8(A6) //00353c 426e fffc CLR.W -4(A6) rect_8.x1 = 0; rect_8.y1 = 0; //003540 302c 0002 MOVE.W 2(A4),D0 //003544 9054 SUB.W (A4),D0 //003546 3c00 MOVE.W D0,D6 D6W = sw(rectA4->x2 - rectA4->x1); //003548 3006 MOVE.W D6,D0 //00354a 5246 ADDQ.W #1,D6 //00354c 3d40 fffa MOVE.W D0,-6(A6) rect_8.x2 = sw(D6W + 1); //003550 302c 0006 MOVE.W 6(A4),D0 //003554 906c 0004 SUB.W 4(A4),D0 //003558 3a00 MOVE.W D0,D5 D5W = sw(rectA4->y2 - rectA4->y1); //00355a 3005 MOVE.W D5,D0 //00355c 5245 ADDQ.W #1,D5 //00355e 3d40 fffe MOVE.W D0,-2(A6) rect_8.y2 = sw(D5W + 1); //003562 3006 MOVE.W D6,D0 //003564 0640 000f ADD.W #15,D0 //003568 0240 fff0 AND.W #65520,D0 //00356c e240 ASR.W #1,D0 //00356e 3c00 MOVE.W D0,D6 D6W = sw(((D6W + 15) & 0xfff0) / 2); //003570 4eba fcda JSR $-804 (=0x00324c) TAG00324c(); //003574 41ed f14c LEA -3764(A5),A0 //003578 2648 MOVE.L A0,A3 A3 = e.Byte3764; //00357a 3f3c ffff MOVE.W #65535,-(A7) //00357e 3f06 MOVE.W D6,-(A7) //003580 3f3c 00a0 MOVE.W #160,-(A7) //003584 3f2c 0004 MOVE.W 4(A4),-(A7) //003588 3f14 MOVE.W (A4),-(A7) //00358a 486e fff8 PEA -8(A6) //00358e 4850 PEA (A0) //003590 2f2d e08c MOVE.L -8052(A5),-(A7) //003594 4ead 0112 JSR 274(A5) (=0x006892=TAG0088b2) //003598 4fef 0016 LEA 22(A7),A7 ASSERT(size3764 >= D6W*(rect_8.y2+1)); TAG0088b2(e.PhysicalBase, //src A3, //dst (RectPos *)&rect_8, //dst position rectA4->x1, //src x offset rectA4->y1, //src y offset 160, //src byte width D6W, //dst byte width -1); //00359c 3006 MOVE.W D6,D0 //00359e c1c5 MULU D5,D0 //0035a0 e440 ASR.W #2,D0 //0035a2 3e00 MOVE.W D0,D7 //0035a4 6002 BRA $+4 (=0x0035a8) for (D7W = sw((D6W * D5W)/4); D7W > 0; D7W--) { //0035a6 469b NOT.L (A3)+ longGear(A3) ^= -1; A3 += 4; //0035a8 51cf fffc DBF D7,$-2 (=0x0035a6) }; //0035ac 3f3c ffff MOVE.W #65535,-(A7) //0035b0 3f06 MOVE.W D6,-(A7) //0035b2 2f0c MOVE.L A4,-(A7) //0035b4 486d f14c PEA -3764(A5) //0035b8 4eba fdfc JSR $-514 (=0x0033b6) //0035bc 4fef 000c LEA 12(A7),A7 BitBltSquareImage(e.Byte3764, rectA4, D6W, -1); for (i=0; i<5; i++) { wvbl(_1_); } //0035c0 4eba fca2 JSR $-860 (=0x003264) TAG003264(); //0035c4 4cdf 18e0 MOVEM.L (A7)+,D567A34 //0035c8 4e5e UNLK A6 //0035ca 4e75 RTS RETURN; } // ********************************************************* // // ********************************************************* void TAG004ea2(i16 *) { HopefullyNotNeeded(); // This appears to do nothing on the Atari. // A parameter of 115 does something. But 200 does nothing. //;;;;;;;;;;;;;;;;;;;;;;;; //004ea2 222f 0004 MOVE.L 4(A7),D1 ; parameter (pointer) //004ea6 303c 00c8 MOVE.W #200,D0 ; //004eaa 2b4a fd58 MOVE.L A2,-680(A5) ;save A2 //004eae 2b5f fd54 MOVE.L (A7)+,-684(A5) ;save return //004eb2 4e42 TRAP #2 //004eb4 206d fd54 MOVE.L -684(A5),A0 ;get return //004eb8 246d fd58 MOVE.L -680(A5),A2 ;restore A2 //004ebc 4ed0 JMP (A0) ;return //004ebe 4e75 RTS } //file = chaos.ftl offset =68ec // char data004f1c[348] = { 0, 1, 0, 2, 1, 1, 2, 1, 1, 0, 1, 1, 2, 1, 1, 1, //004f2c 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, //004f3c 0, 3, 5, 0, 5, 5, 0, 0, 1, 1, 2, 1, 0,16, 7, 1, //004f4c 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, //004f5c 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, //004f6c 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1, 1, //004f7c 6, 1, 1, 4, 1, 1, 1, 3, 1, 2, 1, 1, 4, 2, 1, 8, //004f8c 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 9, 1, 1, 1, 1, //004f9c 1, 1, 1, 0, 0, 5, 1, 3, 3, 1, 2, 2, 1, 0, 0, 0, //004fac 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //004fbc 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //004fcc 0, 0, 0, 0, 4, 3, 0, 8, 3, 0, 6, 1, 0, 8, 1, 0, //004fdc 8, 1, 0, 4, 1, 1, 3, 1, 1, 0, 5, 0, 1, 1, 1, 0, //004fec 5, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, //004ffc 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //00500c 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //00501c 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, //00502c 0, 5, 1, 0, 1, 1, 0, 1, 1, 0, 2, 5, 0, 6, 1, 0, //00503c 2, 1, 0, 1, 1, 0, 6, 5, 0, 0, 0, 0, 0, 1, 1, 0, //00504c 1, 0, 2, 1, 0, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, //00505c 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 1, 2, //00506c 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 2}; // ********************************************************* // // ********************************************************* // TAG0035cc void DrawDialogBoxOutline(wordRectPos *rectPos, i16 P2, i16 P3, i16 P4) { dReg D6, D7; wordRectPos rectPos_24; wordRectPos rectPos_16; wordRectPos rectPos_8; wordRectPos *rpA4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //0035cc 4e56 ffe8 LINK A6,#-24 //0035d0 48e7 0308 MOVEM.L D67A4,-(A7) //0035d4 286e 0008 MOVE.L 8(A6),A4 rpA4 = rectPos; //0035d8 3e2e 000c MOVE.W 12(A6),D7 D7W = P2; //0035dc 4a47 TST.W D7 //0035de 6c1a BGE $+28 (=0x0035fa) if (D7W < 0) { //0035e0 3f07 MOVE.W D7,-(A7) //0035e2 3f07 MOVE.W D7,-(A7) //0035e4 486e fff8 PEA -8(A6) //0035e8 2f0c MOVE.L A4,-(A7) //0035ea 4eba fef0 JSR $-270 (=0x0034dc) //0035ee 4fef 000c LEA 12(A7),A7 ExpandRectangle(rpA4, &rectPos_8, D7W, D7W); //0035f2 3007 MOVE.W D7,D0 //0035f4 4440 NEG.W D0 //0035f6 3e00 MOVE.W D0,D7 D7W = sw(-D7W); //0035f8 601a BRA $+28 (=0x003614) } else { //0035fa 4878 0008 PEA 8 //0035fe 3f3c 0400 MOVE.W #1024,-(A7) //003602 3f3c 0400 MOVE.W #1024,-(A7) //003606 486e fff8 PEA -8(A6) //00360a 2f0c MOVE.L A4,-(A7) //00360c 4ead 015a JSR 346(A5) (=0x00858c) MemoryMove((pnt)rpA4, (pnt)&rectPos_8, 0x400, 0x400, 8); //003610 4fef 0010 LEA 16(A7),A7 }; //003614 3f2e 0010 MOVE.W 16(A6),-(A7) //003618 486e fff8 PEA -8(A6) //00361c 4eba fdc8 JSR $-566 (=0x0033e6) //003620 5c8f ADDQ.L #6,A7 FillScreenRectangle(&rectPos_8, P4); //003622 4a47 TST.W D7 //003624 6700 0092 BEQ $+148 (=0x0036b8) if (D7W == 0) return; //003628 3f07 MOVE.W D7,-(A7) //00362a 3f07 MOVE.W D7,-(A7) //00362c 486e fff0 PEA -16(A6) //003630 486e fff8 PEA -8(A6) //003634 4eba fea6 JSR $-344 (=0x0034dc) //003638 4fef 000c LEA 12(A7),A7 ExpandRectangle(&rectPos_8, &rectPos_16, D7W, D7W); //00363c 5347 SUBQ.W #1,D7 D7W--; //00363e 7c00 MOVEQ.L #0,D6 //003640 6000 0070 BRA $+114 (=0x0036b2) for (D6W=0; D6W<4; D6W++) { //003644 4878 0008 PEA 8 //003648 3f3c 0400 MOVE.W #1024,-(A7) //00364c 3f3c 0400 MOVE.W #1024,-(A7) //003650 486e ffe8 PEA -24(A6) //003654 486e fff0 PEA -16(A6) //003658 4ead 015a JSR 346(A5) (=0x00858c) //00365c 4fef 0010 LEA 16(A7),A7 MemoryMove((pnt)&rectPos_16, (pnt)&rectPos_24, 0x400, 0x400, 8); //003660 3006 MOVE.W D6,D0 //003662 4ead 003a JSR 58(A5) (=0x0000ba) switch (D6W) { //003666 0000 //003668 0003 //00366a 0038 (=0x0036a2) //00366c 0008 (=0x003674) //00366e 0012 (=0x003680) //003670 001c (=0x00368c) //003672 0026 (=0x003698) case 0: //003674 302e ffe8 MOVE.W -24(A6),D0 //003678 d047 ADD.W D7,D0 //00367a 3d40 ffea MOVE.W D0,-22(A6) rectPos_24.x2 = sw(rectPos_24.x1 + D7W); //00367e 6022 BRA $+36 (=0x0036a2) break; case 1: //003680 302e ffea MOVE.W -22(A6),D0 //003684 9047 SUB.W D7,D0 //003686 3d40 ffe8 MOVE.W D0,-24(A6) rectPos_24.x1 = sw(rectPos_24.x2 - D7W); //00368a 6016 BRA $+24 (=0x0036a2) break; case 2: //00368c 302e ffec MOVE.W -20(A6),D0 //003690 d047 ADD.W D7,D0 //003692 3d40 ffee MOVE.W D0,-18(A6) rectPos_24.y2 = sw(rectPos_24.y1 + D7W); //003696 600a BRA $+12 (=0x0036a2) break; case 3: //003698 302e ffee MOVE.W -18(A6),D0 //00369c 9047 SUB.W D7,D0 //00369e 3d40 ffec MOVE.W D0,-20(A6) rectPos_24.y1 = sw(rectPos_24.y2 - D7W); };// case (D6W) //0036a2 3f2e 000e MOVE.W 14(A6),-(A7) //0036a6 486e ffe8 PEA -24(A6) //0036aa 4eba fd3a JSR $-708 (=0x0033e6) //0036ae 5c8f ADDQ.L #6,A7 FillScreenRectangle(&rectPos_24, P3); //0036b0 5246 ADDQ.W #1,D6 // //0036b2 0c46 0004 CMP.W #4,D6 //0036b6 6d8c BLT $-114 (=0x003644) }; //0036b8 4cdf 10c0 MOVEM.L (A7)+,D67A4 //0036bc 4e5e UNLK A6 //0036be 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG0036c0 void DrawMagnifiedCharacterImage(void) { dReg D0, D6, D7; aReg A4; wordRectPos rect_8; //;;;;;;;;;;;;;;;;;;;;;; //0036c0 4e56 fff8 LINK A6,#-8 //0036c4 48e7 0308 MOVEM.L D67A4,-(A7) //0036c8 302d e46c MOVE.W -7060(A5),D0 //0036cc c1fc 01d0 MULS #464,D0 //0036d0 41ed e46e LEA -7058(A5),A0 //0036d4 d1c0 ADD.L D0,A0 //0036d6 2848 MOVE.L A0,A4 A4 = e.CharacterImages + 464*e.ActualCharacter; //0036d8 3d6d ebd6 fff8 MOVE.W -5162(A5),-8(A6) rect_8.x1 = wRectPos5162.x1; //0036de 4eba fb6c JSR $-1170 (=0x00324c) TAG00324c(); //0036e2 7e00 MOVEQ.L #0,D7 //0036e4 6000 0050 BRA $+82 (=0x003736) for (D7W=0; D7W<32; D7W++) { //0036e8 302e fff8 MOVE.W -8(A6),D0 //0036ec 5440 ADDQ.W #2,D0 //0036ee 3d40 fffa MOVE.W D0,-6(A6) rect_8.x2 = sw(rect_8.x1 + 2); //0036f2 3d6d ebda fffc MOVE.W -5158(A5),-4(A6) rect_8.y1 = wRectPos5162.y1; //0036f8 7c00 MOVEQ.L #0,D6 //0036fa 602e BRA $+48 (=0x00372a) for (D6W=0; D6W<29; D6W++) { //0036fc 302e fffc MOVE.W -4(A6),D0 //003700 5440 ADDQ.W #2,D0 //003702 3d40 fffe MOVE.W D0,-2(A6) rect_8.y2 = sw(rect_8.y1 + 2); //003706 3f3c 0010 MOVE.W #16,-(A7) //00370a 3f06 MOVE.W D6,-(A7) //00370c 3f07 MOVE.W D7,-(A7) //00370e 2f0c MOVE.L A4,-(A7) //003710 4ead 010a JSR 266(A5) (=0x006700) //003714 4fef 000a LEA 10(A7),A7 D0W = sw(GetPixel(A4, D7W, D6W, 16)); //003718 3f00 MOVE.W D0,-(A7) //00371a 486e fff8 PEA -8(A6) //00371e 4eba fcc6 JSR $-824 (=0x0033e6=FillScreenRectangle) //003722 5c8f ADDQ.L #6,A7 FillScreenRectangle(&rect_8, D0W); //003724 566e fffc ADDQ.W #3,-4(A6) rect_8.y1 += 3; //003728 5246 ADDQ.W #1,D6 // //00372a 0c46 001d CMP.W #29,D6 //00372e 6dcc BLT $-50 (=0x0036fc) }; //003730 566e fff8 ADDQ.W #3,-8(A6) rect_8.x1 += 3; // //003734 5247 ADDQ.W #1,D7 // //003736 0c47 0020 CMP.W #32,D7 //00373a 6dac BLT $-82 (=0x0036e8) }; //00373c 4eba fb26 JSR $-1240 (=0x003264) TAG003264(); //003740 4cdf 10c0 MOVEM.L (A7)+,D67A4 //003744 4e5e UNLK A6 //003746 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG003748 void PrintCharacterName(i16 chIdx) { dReg D0; aReg A1; wordRectPos *rectA4; char name[9]; i32 i; //;;;;;;;;;;;;;; //003748 4e56 0000 LINK A6,#0 //00374c 2f0c MOVE.L A4,-(A7) //00374e 302e 0008 MOVE.W 8(A6),D0 //003752 48c0 EXT.L D0 //003754 e780 ASL.L #3,D0 //003756 41ed ebee LEA -5138(A5),A0 //00375a d1c0 ADD.L D0,A0 ASSERT(chIdx < 4); //00375c 2848 MOVE.L A0,A4 rectA4 = &wRectPos5138[chIdx]; //00375e 3f3c 0001 MOVE.W #1,-(A7) //003762 2f0c MOVE.L A4,-(A7) //003764 4eba fc80 JSR $-894 (=0x0033e6=FillScreenRectangle) //003768 5c8f ADDQ.L #6,A7 FillScreenRectangle(rectA4, 1); //00376a 302e 0008 MOVE.W 8(A6),D0 //00376e b06d e46c CMP.W -7060(A5),D0 //003772 6704 BEQ $+6 (=0x003778) if (chIdx != e.ActualCharacter) { //003774 700f MOVEQ.L #15,D0 D0L = 15; //003776 6002 BRA $+4 (=0x00377a) } else { //003778 7009 MOVEQ.L #9,D0 D0L = 9; }; //00377a 322e 0008 MOVE.W 8(A6),D1 //00377e c3fc 0320 MULS #800,D1 //003782 d2ad 9f14 ADD.L -24812(A5),D1 //003786 0681 0000 0304 ADD.L #772,D1 A1 = e.Pnt24812 + 800*chIdx + 772; //00378c 2f01 MOVE.L D1,-(A7) //00378e 3f3c 0001 MOVE.W #1,-(A7) //003792 3f00 MOVE.W D0,-(A7) //003794 3f3c 0009 MOVE.W #9,-(A7) //003798 3014 MOVE.W (A4),D0 //00379a 5440 ADDQ.W #2,D0 //00379c 3f00 MOVE.W D0,-(A7) //00379e 4eba 16d6 JSR $+5848 (=0x004e76=TextToScreen) //0037a2 4fef 000c LEA 12(A7),A7 // character name should be redrawn completely strcpy(name, e.Pnt24812 + 800*chIdx + 772); for(i=0; i<8; i++) { if((name[i]==0) || (name[i]<'A') || (name[i]>'Z')) name[i] = 32; } name[8] = 0; TextToScreen(rectA4->x1+2, 9, D0W, 1, name); //0037a6 285f MOVE.L (A7)+,A4 //0037a8 4e5e UNLK A6 //0037aa 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG0037ac void DrawCharacterHeader(i16 P1, i16 P2) { aReg A0; wordRectPos *rectA0, *rectA1; DlgButton *dlgButtonA0; wordRectPos rect_8; //;;;;;;;;;;;;;;;;;;; //0037ac 4e56 fff8 LINK A6,#-8 //0037b0 4eba fa9a JSR $-1380 (=0x00324c) TAG00324c(); //0037b4 302e 0008 MOVE.W 8(A6),D0 //0037b8 b06d 9f12 CMP.W -24814(A5),D0 //0037bc 6c60 BGE $+98 (=0x00381e) if (P1 < e.Word24814) { //0037be 3f2e 0008 MOVE.W 8(A6),-(A7) //0037c2 4eba ff84 JSR $-122 (=0x003748) //0037c6 548f ADDQ.L #2,A7 PrintCharacterName(P1); //0037c8 302e 0008 MOVE.W 8(A6),D0 //0037cc 48c0 EXT.L D0 //0037ce e780 ASL.L #3,D0 //0037d0 41ed ec0e LEA -5106(A5),A0 //0037d4 d1c0 ADD.L D0,A0 rectA0 = &wRectPos5106[P1]; //0037d6 3f3c 0001 MOVE.W #1,-(A7) //0037da 3f2e 000a MOVE.W 10(A6),-(A7) //0037de 3f3c 0001 MOVE.W #1,-(A7) //0037e2 4850 PEA (A0) //0037e4 4eba fde6 JSR $-536 (=0x0035cc) //0037e8 4fef 000a LEA 10(A7),A7 DrawDialogBoxOutline(rectA0, 1, P2, 1); //0037ec 302e 0008 MOVE.W 8(A6),D0 //0037f0 c1fc 01d0 MULS #464,D0 //0037f4 41ed e46e LEA -7058(A5),A0 //0037f8 d1c0 ADD.L D0,A0 A0 = e.CharacterImages + 464*P1; rectA1 = &wRectPos5106[P1]; //0037fa 302e 0008 MOVE.W 8(A6),D0 //0037fe 48c0 EXT.L D0 //003800 e780 ASL.L #3,D0 //003802 43ed ec0e LEA -5106(A5),A1 //003806 d3c0 ADD.L D0,A1 //003808 3f3c ffff MOVE.W #65535,-(A7) //00380c 3f3c 0010 MOVE.W #16,-(A7) //003810 4851 PEA (A1) //003812 4850 PEA (A0) //003814 4eba fba0 JSR $-1118 (=0x0033b6) //003818 4fef 000c LEA 12(A7),A7 BitBltSquareImage(A0, rectA1, 16, -1); //00381c 603a BRA $+60 (=0x003858) } else { //00381e 302e 0008 MOVE.W 8(A6),D0 //003822 c1fc 000c MULS #12,D0 //003826 41ed ec46 LEA -5050(A5),A0 //00382a d1c0 ADD.L D0,A0 dlgButtonA0 = &dlgButton5050[P1]; //00382c 4878 0008 PEA 8 //003830 3f3c 0400 MOVE.W #1024,-(A7) //003834 3f3c 0400 MOVE.W #1024,-(A7) //003838 486e fff8 PEA -8(A6) //00383c 4868 0002 PEA 2(A0) //003840 4ead 015a JSR 346(A5) (=0x00858c=MemoryMove) //003844 4fef 0010 LEA 16(A7),A7 MemoryMove((pnt)dlgButtonA0+2, (pnt)&rect_8, 0x400, 0x400, 8); //003848 526e fffe ADDQ.W #1,-2(A6) rect_8.y2--; //00384c 4267 CLR.W -(A7) //00384e 486e fff8 PEA -8(A6) //003852 4eba fb92 JSR $-1132 (=0x0033e6) //003856 5c8f ADDQ.L #6,A7 FillScreenRectangle(&rect_8, 0); }; //003858 4eba fa0a JSR $-1524 (=0x003264) TAG003264(); //00385c 4e5e UNLK A6 //00385e 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG003860 void AddDialogButton(DlgButton *P1, pnt P2, i16 P3) { dReg D0, D1; DlgButton *dlgButtonA4; i16 w_18; wordRectPos rectPos_8; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //003860 4e56 ffee LINK A6,#-18 //003864 2f0c MOVE.L A4,-(A7) //003866 286e 0008 MOVE.L 8(A6),A4 dlgButtonA4 = P1; //00386a 4eba f9e0 JSR $-1566 (=0x00324c) TAG00324c(); //00386e 4878 0008 PEA 8 //003872 3f3c 0400 MOVE.W #1024,-(A7) //003876 3f3c 0400 MOVE.W #1024,-(A7) //00387a 486e fff8 PEA -8(A6) //00387e 486c 0002 PEA 2(A4) //003882 4ead 015a JSR 346(A5) (=0x00858c) //003886 4fef 0010 LEA 16(A7),A7 MemoryMove((pnt)&dlgButtonA4->rectPos2, (pnt)&rectPos_8, 0x400, 0x400, 8); //00388a 4267 CLR.W -(A7) //00388c 3f2e 0010 MOVE.W 16(A6),-(A7) //003890 3f3c 0002 MOVE.W #2,-(A7) //003894 486e fff8 PEA -8(A6) //003898 4eba fd32 JSR $-716 (=0x0035cc) //00389c 4fef 000a LEA 10(A7),A7 DrawDialogBoxOutline(&rectPos_8, 2, P3, 0); w_18 = sw((rectPos_8.x1 + rectPos_8.x2)/2); //0038a0 302e fff8 MOVE.W -8(A6),D0 //0038a4 d06e fffa ADD.W -6(A6),D0 //0038a8 e240 ASR.W #1,D0 //0038aa 2f2e 000c MOVE.L 12(A6),-(A7) //0038ae 3d40 ffee MOVE.W D0,-18(A6) //0038b2 4ead 0182 JSR 386(A5) (=0x0065bc=StrLen) //0038b6 588f ADDQ.L #4,A7 D0W = sw(3* StrLen(P2)); //0038b8 c1fc 0003 MULS #3,D0 //0038bc 322e ffee MOVE.W -18(A6),D1 //0038c0 9240 SUB.W D0,D1 D1W = sw(w_18 - D0W); //0038c2 2f2e 000c MOVE.L 12(A6),-(A7) //0038c6 4267 CLR.W -(A7) //0038c8 3f3c 000f MOVE.W #15,-(A7) //0038cc 302e fffe MOVE.W -2(A6),D0 //0038d0 5540 SUBQ.W #2,D0 //0038d2 3f00 MOVE.W D0,-(A7) //0038d4 5241 ADDQ.W #1,D1 //0038d6 3f01 MOVE.W D1,-(A7) //0038d8 4eba 159c JSR $+5534 (=0x004e76=TextToScreen) //0038dc 4fef 000c LEA 12(A7),A7 TextToScreen(D1W+1, rectPos_8.y2-2, 15, 0, P2); //0038e0 4eba f982 JSR $-1660 (=0x003264) TAG003264(); //0038e4 285f MOVE.L (A7)+,A4 //0038e6 4e5e UNLK A6 //0038e8 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG0038ea void GetPalleteItemRect(i16 P1, wordRectPos *rect) { wordRectPos *rectA4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //0038ea 4e56 0000 LINK A6,#0 //0038ee 2f0c MOVE.L A4,-(A7) //0038f0 286e 000a MOVE.L 10(A6),A4 rectA4 = rect; //0038f4 41d4 LEA (A4),A0 //0038f6 548c ADDQ.L #2,A4 //0038f8 30ad ebde MOVE.W -5154(A5),(A0) rectA4->x1 = wRectPos5154.x1; //0038fc 41d4 LEA (A4),A0 //0038fe 548c ADDQ.L #2,A4 //003900 30ad ebe0 MOVE.W -5152(A5),(A0) rectA4->x2 = wRectPos5154.x2; //003904 41d4 LEA (A4),A0 //003906 548c ADDQ.L #2,A4 //003908 302e 0008 MOVE.W 8(A6),D0 //00390c e740 ASL.W #3,D0 //00390e d06d ebe2 ADD.W -5150(A5),D0 //003912 3080 MOVE.W D0,(A0) rectA4->y1 = sw(wRectPos5154.y1 + 8*P1); //003914 302c fffe MOVE.W -2(A4),D0 //003918 5c40 ADDQ.W #6,D0 //00391a 3880 MOVE.W D0,(A4) rectA4->y2 = sw(rectA4->y1 + 6); //00391c 285f MOVE.L (A7)+,A4 //00391e 4e5e UNLK A6 //003920 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG003922 void DrawSelectedColor(i16 P1) { dReg D0; wordRectPos rect_8; //;;;;;;;;;;;;;;;;;;;;;;; //003922 4e56 fff0 LINK A6,#-16 //003926 302e 0008 MOVE.W 8(A6),D0 //00392a b06d e46a CMP.W -7062(A5),D0 //00392e 6700 0074 BEQ $+118 (=0x0039a4) if (P1 == e.Word7062) return; //003932 4eba f918 JSR $-1766 (=0x00324c) TAG00324c(); //003936 4a6d e46a TST.W -7062(A5) //00393a 6d2e BLT $+48 (=0x00396a) if (e.Word7062 >= 0) { //00393c 486e fff8 PEA -8(A6) //003940 3f2d e46a MOVE.W -7062(A5),-(A7) //003944 4eba ffa4 JSR $-90 (=0x0038ea) //003948 5c8f ADDQ.L #6,A7 GetPalleteItemRect(e.Word7062, &rect_8); //00394a 41ed ed98 LEA -4712(A5),A0 //00394e d0ed e46a ADD.W -7062(A5),A0 //003952 7000 MOVEQ.L #0,D0 //003954 1010 MOVE.B (A0),D0 D0L = byte4712[e.Word7062]; //003956 3f00 MOVE.W D0,-(A7) //003958 4267 CLR.W -(A7) //00395a 3f3c 0001 MOVE.W #1,-(A7) //00395e 486e fff8 PEA -8(A6) //003962 4eba fc68 JSR $-918 (=0x0035cc) //003966 4fef 000a LEA 10(A7),A7 DrawDialogBoxOutline(&rect_8, 1, 0, D0W); }; //00396a 302e 0008 MOVE.W 8(A6),D0 //00396e 3b40 e46a MOVE.W D0,-7062(A5) e.Word7062 = P1; //003972 486e fff8 PEA -8(A6) //003976 3f00 MOVE.W D0,-(A7) //003978 4eba ff70 JSR $-142 (=0x0038ea) //00397c 5c8f ADDQ.L #6,A7 GetPalleteItemRect(e.Word7062, &rect_8); //00397e 41ed ed98 LEA -4712(A5),A0 //003982 d0ed e46a ADD.W -7062(A5),A0 //003986 7000 MOVEQ.L #0,D0 //003988 1010 MOVE.B (A0),D0 D0W = byte4712[e.Word7062]; //00398a 3f00 MOVE.W D0,-(A7) //00398c 3f3c 000f MOVE.W #15,-(A7) //003990 3f3c 0001 MOVE.W #1,-(A7) //003994 486e fff8 PEA -8(A6) //003998 4eba fc32 JSR $-972 (=0x0035cc) //00399c 4fef 000a LEA 10(A7),A7 DrawDialogBoxOutline(&rect_8, 1, 15, D0W); //0039a0 4eba f8c2 JSR $-1852 (=0x003264) TAG003264(); //0039a4 4e5e UNLK A6 //0039a6 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG0039a8(void) { aReg A0; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //0039a8 302d e46c MOVE.W -7060(A5),D0 //0039ac c1fc 0006 MULS #6,D0 //0039b0 41ed ebae LEA -5202(A5),A0 //0039b4 d1c0 ADD.L D0,A0 A0 = e.Byte5202 + 6*e.ActualCharacter; //0039b6 7000 MOVEQ.L #0,D0 //0039b8 1028 0004 MOVE.B 4(A0),D0 //0039bc 3b40 eda8 MOVE.W D0,-4696(A5) e.Word4696 = ub(A0[4]); //0039c0 302d e46c MOVE.W -7060(A5),D0 //0039c4 c1fc 01d0 MULS #464,D0 //0039c8 41ed e46e LEA -7058(A5),A0 //0039cc d1c0 ADD.L D0,A0 A0 = e.CharacterImages + 464*e.ActualCharacter; //0039ce 4878 01d0 PEA 464 //0039d2 3f3c 0400 MOVE.W #1024,-(A7) //0039d6 3f3c 0400 MOVE.W #1024,-(A7) //0039da 486d edaa PEA -4694(A5) //0039de 4850 PEA (A0) //0039e0 4ead 015a JSR 346(A5) (=0x00858c=MemoryMove) //0039e4 4fef 0010 LEA 16(A7),A7 MemoryMove(A0, e.Byte4694, 0x400, 0x400, 464); //0039e8 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG0039ea void FillCharacterNameEditBox(pnt P1, i16 P2, i16 P3) { dReg D0, D1, D5, D6, D7; wordRectPos *rectA4; //;;;;;;;;;;;;;;;;;; //0039ea 4e56 0000 LINK A6,#0 //0039ee 48e7 0708 MOVEM.L D567A4,-(A7) //0039f2 302e 000c MOVE.W 12(A6),D0 //0039f6 c1fc 000c MULS #12,D0 //0039fa 41ed ec46 LEA -5050(A5),A0 //0039fe d1c0 ADD.L D0,A0 //003a00 5488 ADDQ.L #2,A0 //003a02 2848 MOVE.L A0,A4 rectA4 = &dlgButton5050[P2].rectPos2; //003a04 2f2e 0008 MOVE.L 8(A6),-(A7) //003a08 4ead 0182 JSR 386(A5) (=0x0065bc=StrLen) //003a0c 588f ADDQ.L #4,A7 //003a0e 3a00 MOVE.W D0,D5 D5W = StrLen(P1); //003a10 426d ebd0 CLR.W -5168(A5) e.Word5168 = 0; //003a14 3f3c 0001 MOVE.W #1,-(A7) //003a18 2f0c MOVE.L A4,-(A7) //003a1a 4eba f9ca JSR $-1588 (=0x0033e6=FillScreenRectangle) //003a1e 5c8f ADDQ.L #6,A7 FillScreenRectangle(rectA4, 1); //003a20 3014 MOVE.W (A4),D0 //003a22 5440 ADDQ.W #2,D0 //003a24 3e00 MOVE.W D0,D7 D7W = sw(rectA4->x1 + 2); //003a26 322c 0006 MOVE.W 6(A4),D1 //003a2a 5541 SUBQ.W #2,D1 //003a2c 3c01 MOVE.W D1,D6 D6W = sw(rectA4->y2 - 2); //003a2e 2f2e 0008 MOVE.L 8(A6),-(A7) //003a32 3f3c 0001 MOVE.W #1,-(A7) //003a36 3f3c 0009 MOVE.W #9,-(A7) //003a3a 3f01 MOVE.W D1,-(A7) //003a3c 3f00 MOVE.W D0,-(A7) //003a3e 4eba 1436 JSR $+5176 (=0x004e76=TextToScreen) //003a42 4fef 000c LEA 12(A7),A7 TextToScreen(D7W, D6W, 9, 1, P1); //003a46 3005 MOVE.W D5,D0 //003a48 c1fc 0006 MULS #6,D0 //003a4c d047 ADD.W D7,D0 D0W = sw(6*D5W + D7W); //003a4e 322e 000e MOVE.W 14(A6),D1 //003a52 9245 SUB.W D5,D1 D1W = sw(P3 - D5W); //003a54 7413 MOVEQ.L #19,D2 //003a56 9441 SUB.W D1,D2 //003a58 48c2 EXT.L D2 //003a5a d4ad f91c ADD.L -1764(A5),D2 //003a5e 2f02 MOVE.L D2,-(A7) //003a60 3f3c 0001 MOVE.W #1,-(A7) //003a64 3f3c 0009 MOVE.W #9,-(A7) //003a68 3f06 MOVE.W D6,-(A7) //003a6a 3f00 MOVE.W D0,-(A7) //003a6c 4eba 1408 JSR $+5130 (=0x004e76=TextToScreen) //003a70 4fef 000c LEA 12(A7),A7 TextToScreen(D0W, D6W, 9, 1, "___________________" + 19 - D1W); //003a74 4cdf 10e0 MOVEM.L (A7)+,D567A4 //003a78 4e5e UNLK A6 //003a7a 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG003a7c void PrintAttributeValue(pnt P1, i32 P2, i32 P3) { i8 b_20[20]; //;;;;;;;;;;;;;;;;;;;;;; //003a7c 4e56 ffec LINK A6,#-20 //003a80 3f2e 000c MOVE.W 12(A6),-(A7) //003a84 2f2e 0008 MOVE.L 8(A6),-(A7) //003a88 486d fa0a PEA -1526(A5) //003a8c 486e ffec PEA -20(A6) //003a90 4ead 017a JSR 378(A5) (=0x0065e0) //003a94 4fef 000e LEA 14(A7),A7 atari_sprintf(b_20, "%s %d", (i32)P1, P2); //003a98 486e ffec PEA -20(A6) //003a9c 4267 CLR.W -(A7) //003a9e 3f3c 000d MOVE.W #13,-(A7) //003aa2 3f2e 000e MOVE.W 14(A6),-(A7) //003aa6 3f3c 0011 MOVE.W #17,-(A7) //003aaa 4eba 13ca JSR $+5068 (=0x004e76=TextToScreen) //003aae 4fef 000c LEA 12(A7),A7 TextToScreen(17, P3, 13, 0, b_20); //003ab2 4e5e UNLK A6 //003ab4 4e75 RTS } // ********************************************************* // // ********************************************************* // _TAG003ab6 RESTARTABLE _DrawCharacterDetails(const i32 P1, const i32 P2) {//(void) static dReg D0, D3, D4, D5, D6, D7; static aReg A0, A1, A4; static i8 b_28[20]; static wordRectPos rect_8; RESTARTMAP RESTART(1) RESTART(2) END_RESTARTMAP //;;;;;;;;;;;;;;;;;;;;;; //003ab6 4e56 ffe4 LINK A6,#-28 //003aba 48e7 1f08 MOVEM.L D34567A4,-(A7) //003abe 3e2e 0008 MOVE.W 8(A6),D7 D7W = sw(P1); //003ac2 3c2d e46c MOVE.W -7060(A5),D6 D6W = e.ActualCharacter; //003ac6 bc47 CMP.W D7,D6 //003ac8 6700 01ae BEQ $+432 (=0x003c78) if (D7W == D6W) RETURN; //003acc 3b47 e46c MOVE.W D7,-7060(A5) e.ActualCharacter = D7W; //003ad0 4eba f77a JSR $-2180 (=0x00324c) TAG00324c(); //003ad4 4a46 TST.W D6 //003ad6 6d0a BLT $+12 (=0x003ae2) if (D6W >= 0) { //003ad8 4267 CLR.W -(A7) //003ada 3f06 MOVE.W D6,-(A7) //003adc 4eba fcce JSR $-816 (=0x0037ac) //003ae0 588f ADDQ.L #4,A7 DrawCharacterHeader(D6W, 0); }; //003ae2 4a6e 000a TST.W 10(A6) //003ae6 6704 BEQ $+6 (=0x003aec) if (P2 != 0) { //003ae8 4eba febe JSR $-320 (=0x0039a8) TAG0039a8(); }; //003aec 3f3c 000f MOVE.W #15,-(A7) //003af0 3f07 MOVE.W D7,-(A7) //003af2 4eba fcb8 JSR $-838 (=0x0037ac) //003af6 588f ADDQ.L #4,A7 DrawCharacterHeader(D7W, 15); //003af8 3f3c ffff MOVE.W #65535,-(A7) //003afc 3f3c 0018 MOVE.W #24,-(A7) //003b00 486d ec2e PEA -5074(A5) //003b04 486d e092 PEA -8046(A5) //003b08 4eba f8ac JSR $-1874 (=0x0033b6) //003b0c 4fef 000c LEA 12(A7),A7 wvbl(_1_); BitBltSquareImage((i8 *)FrameImage, &wRectPos5106[4], 24, -1); wvbl(_2_); //003b10 3007 MOVE.W D7,D0 //003b12 c1fc 01d0 MULS #464,D0 //003b16 41ed e46e LEA -7058(A5),A0 //003b1a d1c0 ADD.L D0,A0 A0 = e.CharacterImages + 464*D7W; //003b1c 3f3c 0001 MOVE.W #1,-(A7) //003b20 3f3c 0010 MOVE.W #16,-(A7) //003b24 486d ec36 PEA -5066(A5) //003b28 4850 PEA (A0) //003b2a 4eba f88a JSR $-1908 (=0x0033b6) //003b2e 4fef 000c LEA 12(A7),A7 BitBltSquareImage(A0, &wRectPos5106[5], 16, 1); //003b32 4267 CLR.W -(A7) //003b34 486d ec3e PEA -5058(A5) //003b38 4eba f8ac JSR $-1874 (=0x0033e6) //003b3c 5c8f ADDQ.L #6,A7 FillScreenRectangle(&wRectPos5106[6], 0); //003b3e 3007 MOVE.W D7,D0 //003b40 c1fc 0320 MULS #800,D0 //003b44 d0ad 9f14 ADD.L -24812(A5),D0 //003b48 0680 0000 0304 ADD.L #772,D0 //003b4e 2840 MOVE.L D0,A4 A4 = e.Pnt24812 + 800*D7W + 772; //003b50 3f3c 0007 MOVE.W #7,-(A7) //003b54 3f3c 000d MOVE.W #13,-(A7) //003b58 4854 PEA (A4) //003b5a 4eba fe8e JSR $-368 (=0x0039ea) //003b5e 508f ADDQ.L #0,A7 FillCharacterNameEditBox(A4, 13, 7); //003b60 3f3c 0013 MOVE.W #19,-(A7) //003b64 3f3c 000e MOVE.W #14,-(A7) //003b68 486c 0008 PEA 8(A4) //003b6c 4eba fe7c JSR $-386 (=0x0039ea) //003b70 508f ADDQ.L #0,A7 FillCharacterNameEditBox(A4+8, 14, 19); //003b72 4854 PEA (A4) //003b74 4ead 0182 JSR 386(A5) (=0x0065bc=StrLen) //003b78 588f ADDQ.L #4,A7 D0W = StrLen(A4); //003b7a 3f00 MOVE.W D0,-(A7) //003b7c 4267 CLR.W -(A7) //003b7e 4eba f886 JSR $-1912 (=0x003406) //003b82 588f ADDQ.L #4,A7 DrawNameTitleCarret(0, D0W); //003b84 7a79 MOVEQ.L #121,D5 //003b86 7c00 MOVEQ.L #0,D6 //003b88 6000 0076 BRA $+120 (=0x003c00) for (D5L=121, D6L=0; D6W<4; D6W++) { //003b8c 3006 MOVE.W D6,D0 //003b8e c1fc 0006 MULS #6,D0 //003b92 d08c ADD.L A4,D0 //003b94 2040 MOVE.L D0,A0 A0 = A4 + 6*D6W; //003b96 2628 005e MOVE.L 94(A0),D3 D3L = LE32(longGear(A0+94)); //003b9a 7800 MOVEQ.L #0,D4 //003b9c 6004 BRA $+6 (=0x003ba2) for (D4L=0; D3L >= 500; D3L>>=1, D4W++){}; //003b9e e283 ASR.L #1,D3 //003ba0 5244 ADDQ.W #1,D4 // //003ba2 0c83 0000 01f4 CMP.L #500,D3 //003ba8 6cf4 BGE $-10 (=0x003b9e) //003baa 4a44 TST.W D4 //003bac 6750 BEQ $+82 (=0x003bfe) if (D4W == 0) continue; //003bae 5344 SUBQ.W #1,D4 D4W--; //003bb0 0c44 000f CMP.W #15,D4 //003bb4 6d02 BLT $+4 (=0x003bb8) //003bb6 780f MOVEQ.L #15,D4 if (D4W >= 15) D4W = 14; //003bb8 3004 MOVE.W D4,D0 //003bba 48c0 EXT.L D0 //003bbc e580 ASL.L #2,D0 //003bbe 41ed ed5c LEA -4772(A5),A0 //003bc2 d1c0 ADD.L D0,A0 A0 = pnt4772[D4W]; //003bc4 3006 MOVE.W D6,D0 //003bc6 48c0 EXT.L D0 //003bc8 e580 ASL.L #2,D0 //003bca 43ed ed4c LEA -4788(A5),A1 //003bce d3c0 ADD.L D0,A1 A1 = pnt4788[D6W]; //003bd0 2f11 MOVE.L (A1),-(A7) //003bd2 2f10 MOVE.L (A0),-(A7) //003bd4 486d fa10 PEA -1520(A5) //003bd8 486e ffe4 PEA -28(A6) //003bdc 4ead 017a JSR 378(A5) (=0x0065e0) //003be0 4fef 0010 LEA 16(A7),A7 atari_sprintf(b_28, "%s %s", (i32)A0, (i32)A1); //003be4 486e ffe4 PEA -28(A6) //003be8 4267 CLR.W -(A7) //003bea 3f3c 000d MOVE.W #13,-(A7) //003bee 3f05 MOVE.W D5,-(A7) //003bf0 3f3c 0011 MOVE.W #17,-(A7) //003bf4 4eba 1280 JSR $+4738 (=0x004e76=TextToScreen) //003bf8 4fef 000c LEA 12(A7),A7 //003bfc 5e45 ADDQ.W #7,D5 TextToScreen(17, D5W, 13, 0, b_28); D5W += 7; //003bfe 5246 ADDQ.W #1,D6 // //003c00 0c46 0003 CMP.W #3,D6 //003c04 6f86 BLE $-120 (=0x003b8c) }; //003c06 0c45 0095 CMP.W #149,D5 //003c0a 6c26 BGE $+40 (=0x003c32) if (D5W < 149) { //003c0c 7011 MOVEQ.L #17,D0 //003c0e 3d40 fff8 MOVE.W D0,-8(A6) rect_8.x1 = 17; //003c12 3d7c 0083 fffa MOVE.W #131,-6(A6) rect_8.x2 = 131; //003c18 3005 MOVE.W D5,D0 //003c1a 5d40 SUBQ.W #6,D0 //003c1c 3d40 fffc MOVE.W D0,-4(A6) rect_8.y1 = sw(D5W-6); //003c20 3d7c 0095 fffe MOVE.W #149,-2(A6) rect_8.y2 = 149; //003c26 4267 CLR.W -(A7) //003c28 486e fff8 PEA -8(A6) //003c2c 4eba f7b8 JSR $-2118 (=0x0033e6) //003c30 5c8f ADDQ.L #6,A7 FillScreenRectangle(&rect_8, 0); }; //003c32 3f3c 009a MOVE.W #154,-(A7) //003c36 3f2c 0036 MOVE.W 54(A4),-(A7) //003c3a 486d fa16 PEA -1514(A5) //003c3e 4eba fe3c JSR $-450 (=0x003a7c) //003c42 508f ADDQ.L #0,A7 PrintAttributeValue("HEALTH ", LE16(wordGear(A4+54)), 154); //003c44 306c 003a MOVE.W 58(A4),A0 //003c48 2008 MOVE.L A0,D0 //003c4a 81fc 000a DIVS #10,D0 //003c4e 3f3c 00a1 MOVE.W #161,-(A7) //003c52 3f00 MOVE.W D0,-(A7) //003c54 486d fa22 PEA -1502(A5) //003c58 4eba fe22 JSR $-476 (=0x003a7c) //003c5c 508f ADDQ.L #0,A7 PrintAttributeValue("STAMINA ",LE16(wordGear(A4+58))/10, 161); //003c5e 3f3c 00a8 MOVE.W #168,-(A7) //003c62 3f2c 003e MOVE.W 62(A4),-(A7) //003c66 486d fa2e PEA -1490(A5) //003c6a 4eba fe10 JSR $-494 (=0x003a7c) //003c6e 508f ADDQ.L #0,A7 PrintAttributeValue("MANA ",LE16(wordGear(A4+62)), 168); //003c70 4eba fa4e JSR $-1456 (=0x0036c0) DrawMagnifiedCharacterImage(); //003c74 4eba f5ee JSR $-2576 (=0x003264) TAG003264(); //003c78 4cdf 10f8 MOVEM.L (A7)+,D34567A4 //003c7c 4e5e UNLK A6 //003c7e 4e75 RTS RETURN; } // ********************************************************* // // ********************************************************* // _TAG003f12 RESTARTABLE _DrawCharacterEditorScreen(void) {//(void) static dReg D7; static wordRectPos rect_8; RESTARTMAP RESTART(1) END_RESTARTMAP //;;;;;;;;;;;;;;; //003f12 4e56 fff8 LINK A6,#-8 //003f16 2f07 MOVE.L D7,-(A7) //003f18 4eba f332 JSR $-3276 (=0x00324c) TAG00324c(); //003f1c 4878 7d00 PEA 32000 //003f20 2f2d e08c MOVE.L -8052(A5),-(A7) //003f24 4ead 012a JSR 298(A5) (=0x0086a8=ClearMemory) //003f28 508f ADDQ.L #0,A7 ClearMemory(e.PhysicalBase,32000); //003f2a 3f3c 0002 MOVE.W #2,-(A7) //003f2e 486d fa3a PEA -1478(A5) //003f32 486d ecbe PEA -4930(A5) //003f36 4eba f928 JSR $-1750 (=0x003860) //003f3a 4fef 000a LEA 10(A7),A7 AddDialogButton(&dlgButton5050[10], "LOAD CHAMPIONS", 2); //003f3e 3f3c 0002 MOVE.W #2,-(A7) //003f42 486d fa4a PEA -1462(A5) //003f46 486d ecca PEA -4918(A5) //003f4a 4eba f914 JSR $-1770 (=0x003860) //003f4e 4fef 000a LEA 10(A7),A7 AddDialogButton(&dlgButton5050[11], "SAVE CHAMPIONS", 2); //003f52 3f3c 0002 MOVE.W #2,-(A7) //003f56 486d fa5a PEA -1446(A5) //003f5a 486d ecd6 PEA -4906(A5) //003f5e 4eba f900 JSR $-1790 (=0x003860) //003f62 4fef 000a LEA 10(A7),A7 AddDialogButton(&dlgButton5050[12], "MAKE NEW ADVENTURE", 2); //003f66 3f3c 0002 MOVE.W #2,-(A7) //003f6a 486d fa6e PEA -1426(A5) //003f6e 486d ec9a PEA -4966(A5) //003f72 4eba f8ec JSR $-1810 (=0x003860) //003f76 4fef 000a LEA 10(A7),A7 AddDialogButton(&dlgButton5050[7], "REVERT", 2); //003f7a 3f3c 0002 MOVE.W #2,-(A7) //003f7e 486d fa76 PEA -1418(A5) //003f82 486d eca6 PEA -4954(A5) //003f86 4eba f8d8 JSR $-1830 (=0x003860) //003f8a 4fef 000a LEA 10(A7),A7 AddDialogButton(&dlgButton5050[8], "UNDO", 2); //003f8e 3f3c 0002 MOVE.W #2,-(A7) //003f92 486d fa7c PEA -1412(A5) //003f96 486d ed06 PEA -4858(A5) //003f9a 4eba f8c4 JSR $-1850 (=0x003860) //003f9e 4fef 000a LEA 10(A7),A7 AddDialogButton(&dlgButton5050[16], "QUIT", 2); //003fa2 4267 CLR.W -(A7) //003fa4 3f3c 0003 MOVE.W #3,-(A7) //003fa8 3f3c 0003 MOVE.W #3,-(A7) //003fac 486d ebd6 PEA -5162(A5) //003fb0 4eba f61a JSR $-2532 (=0x0035cc) //003fb4 4fef 000a LEA 10(A7),A7 DrawDialogBoxOutline(&wRectPos5162, 3, 3, 0); //003fb8 4267 CLR.W -(A7) //003fba 3f3c 0002 MOVE.W #2,-(A7) //003fbe 3f3c 0002 MOVE.W #2,-(A7) //003fc2 486d ebe6 PEA -5146(A5) //003fc6 4eba f604 JSR $-2554 (=0x0035cc) //003fca 4fef 000a LEA 10(A7),A7 DrawDialogBoxOutline(&wRectPos5146, 2, 2, 0); //003fce 3f3c 0001 MOVE.W #1,-(A7) //003fd2 4267 CLR.W -(A7) //003fd4 4eba fae0 JSR $-1310 (=0x003ab6) //003fd8 588f ADDQ.L #4,A7 DrawCharacterDetails(_1_, 0, 1); //003fda 7e01 MOVEQ.L #1,D7 //003fdc 600c BRA $+14 (=0x003fea) for (D7W = 1; D7W < e.Word24814; D7W++) { //003fde 4267 CLR.W -(A7) //003fe0 3f07 MOVE.W D7,-(A7) //003fe2 4eba f7c8 JSR $-2102 (=0x0037ac) //003fe6 588f ADDQ.L #4,A7 DrawCharacterHeader(D7W, 0); //003fe8 5247 ADDQ.W #1,D7 // //003fea be6d 9f12 CMP.W -24814(A5),D7 //003fee 6dee BLT $-16 (=0x003fde) }; //003ff0 4267 CLR.W -(A7) //003ff2 4eba f92e JSR $-1744 (=0x003922) //003ff6 548f ADDQ.L #2,A7 DrawSelectedColor(0); //003ff8 7e01 MOVEQ.L #1,D7 //003ffa 6024 BRA $+38 (=0x004020) for (D7W=1; D7W<16; D7W++) { //003ffc 486e fff8 PEA -8(A6) //004000 3f07 MOVE.W D7,-(A7) //004002 4eba f8e6 JSR $-1816 (=0x0038ea) //004006 5c8f ADDQ.L #6,A7 GetPalleteItemRect(D7W, &rect_8); //004008 41ed ed98 LEA -4712(A5),A0 //00400c d0c7 ADD.W D7,A0 //00400e 7000 MOVEQ.L #0,D0 //004010 1010 MOVE.B (A0),D0 //004012 3f00 MOVE.W D0,-(A7) //004014 486e fff8 PEA -8(A6) //004018 4eba f3cc JSR $-3122 (=0x0033e6) //00401c 5c8f ADDQ.L #6,A7 FillScreenRectangle(&rect_8, byte4712[D7W]); // //00401e 5247 ADDQ.W #1,D7 // //004020 0c47 0010 CMP.W #16,D7 //004024 6dd6 BLT $-40 (=0x003ffc) }; //004026 4eba f23c JSR $-3522 (=0x003264) TAG003264(); //00402a 2e1f MOVE.L (A7)+,D7 //00402c 4e5e UNLK A6 //00402e 4e75 RTS RETURN; } // ********************************************************* // // ********************************************************* void TAG00439e(void) { dReg D7; //;;;;;;;;;;;;;;; //00439e 2f07 MOVE.L D7,-(A7) //0043a0 7e00 MOVEQ.L #0,D7 //0043a2 6000 0080 BRA $+130 (=0x004424) for (D7W=0; D7W pos) desired_pos = pos; // Draw carret DrawNameTitleCarret(0, desired_pos); break; }; //00497a 302d e46c MOVE.W -7060(A5),D0 //00497e c1fc 0320 MULS #800,D0 //004982 d0ad 9f14 ADD.L -24812(A5),D0 //004986 0680 0000 0304 ADD.L #772,D0 //00498c 2f00 MOVE.L D0,-(A7) //00498e 4267 CLR.W -(A7) //004990 3f2e fffc MOVE.W -4(A6),-(A7) //004994 4eba eaf4 JSR $-5386 (=0x00348a) //004998 508f ADDQ.L #0,A7 //00499a 603c BRA $+62 (=0x0049d8) break; case 15: // Change character title { // First get character name and determine length i16 desired_pos = (i16)(((buffer[2]-17)/6) + 1); i16 pos; char* title = e.Pnt24812 + 800*e.ActualCharacter + 780; // Then get desired carret position and fix it pos = (i16)strlen(title); if(desired_pos > pos) desired_pos = pos; // Draw carret //DrawNameTitleCarret(1,desired_pos); desired_pos += 32; // I can see if editing name or title 'coz position could not be larger than 32 }; break; //00499c 302d e46c MOVE.W -7060(A5),D0 //0049a0 c1fc 0320 MULS #800,D0 //0049a4 d0ad 9f14 ADD.L -24812(A5),D0 //0049a8 0680 0000 030c ADD.L #780,D0 //0049ae 2f00 MOVE.L D0,-(A7) //0049b0 3f3c 0001 MOVE.W #1,-(A7) //0049b4 3f2e fffc MOVE.W -4(A6),-(A7) //0049b8 4eba ead0 JSR $-5422 (=0x00348a) //0049bc 508f ADDQ.L #0,A7 //0049be 6018 BRA $+26 (=0x0049d8) case 16: NotImplemented(0x49c0); goto case17; //0049c0 3f2e fffe MOVE.W -2(A6),-(A7) //0049c4 4eba f2ba JSR $-3396 (=0x003c80) //0049c8 548f ADDQ.L #2,A7 //0049ca 600c BRA $+14 (=0x0049d8) break; case 17: case17: //0049cc 486d ed08 PEA -4856(A5) //0049d0 4eba eb5a JSR $-5284 (=0x00352c) //0049d4 588f ADDQ.L #4,A7 TAG00352c(_10_,&dlgButton5050[16].rectPos2); //0049d6 6052 BRA $+84 (=0x004a2a) RETURN; case 10: default: break; }; //case //0049d8 4a6d ebc6 TST.W -5178(A5) //0049dc 6600 fb62 BNE $-1180 (=0x004540) } while (e.Word5178 != 0); NotImplemented(0x49e0); //0049e0 3f3c 0025 MOVE.W #37,-(A7) //0049e4 4ead 0092 JSR 146(A5) (=0x005c50=Trap #14) //0049e8 548f ADDQ.L #2,A7 //0049ea 4eba e860 JSR $-6046 (=0x00324c) //0049ee 4a6d ebd0 TST.W -5168(A5) //0049f2 6714 BEQ $+22 (=0x004a08) //0049f4 426d ebd0 CLR.W -5168(A5) //0049f8 3f3c 0001 MOVE.W #1,-(A7) //0049fc 486d ebc8 PEA -5176(A5) //004a00 4eba e9e4 JSR $-5658 (=0x0033e6) //004a04 5c8f ADDQ.L #6,A7 //004a06 6014 BRA $+22 (=0x004a1c) //004a08 7001 MOVEQ.L #1,D0 //004a0a 3b40 ebd0 MOVE.W D0,-5168(A5) //004a0e 3f3c 000f MOVE.W #15,-(A7) //004a12 486d ebc8 PEA -5176(A5) //004a16 4eba e9ce JSR $-5680 (=0x0033e6) //004a1a 5c8f ADDQ.L #6,A7 //004a1c 4eba e846 JSR $-6072 (=0x003264) //004a20 701e MOVEQ.L #30,D0 //004a22 3b40 ebc6 MOVE.W D0,-5178(A5) //004a26 6000 fb18 BRA $-1254 (=0x004540) //004a2a 4cdf 00c0 MOVEM.L (A7)+,D67 //004a2e 4e5e UNLK A6 //004a30 4e75 RTS RETURN; }; // Internal function to make TextOut easier to read void TAG004d4a(dReg& D2, dReg& D3, dReg& D4, dReg& D5, aReg& A2, aReg A3, i32 A3inc, i32 jA0, i32 jA1) { dReg D0, D1, D6, D7; loop: //004d4a c594 AND.L D2,(A4) //004d4c c5ac 0004 AND.L D2,4(A4) longGear(A3+0) &= LE32(D2L); longGear(A3+4) &= LE32(D2L); //004d50 7000 MOVEQ.L #0,D0 //004d52 1012 MOVE.B (A2),D0 D0L = (UI8)(*A2); //004d54 4efb 5002 JMP 2(PC,D5W) switch (D5W) { case 0: //004d58 720b MOVEQ.L #11,D1 //004d5a 9243 SUB.W D3,D1 //004d5c e368 LSL.W D1,D0 D0W <<= 11-D3W; break; //004d5e 6010 BRA $+18 (=0x004d70) case 8: //004d60 3203 MOVE.W D3,D1 //004d62 0441 000b SUB.W #11,D1 //004d66 e268 LSR.W D1,D0 D0W >>= D3W-11; break; //004d68 6006 BRA $+8 (=0x004d70) case 18: //004d6a 721b MOVEQ.L #27,D1 //004d6c 9243 SUB.W D3,D1 //004d6e e368 LSL.W D1,D0 D0W <<= 27-D3W; break; default: NotImplemented(0x4d6e); }; //004d70 3200 MOVE.W D0,D1 //004d72 4841 SWAP D1 //004d74 3200 MOVE.W D0,D1 //004d76 4840 SWAP D0 D1H1 = D0H2; D1H2 = D0H2; //D1W = D0W; //SWAP(D1); //D1W = D0W; //SWAP(D0); D0L = ((D0L & 0xffff)<<16) | ((D0L>>16) & 0xffff); //004d78 7c00 MOVEQ.L #0,D6 //004d7a 7e00 MOVEQ.L #0,D7 D6L = 0; D7L = 0; //004d7c 4ed0 JMP (A0) switch (jA0&0xffff) { case 1: D6L = D0L; break; //004d7e 2e00 MOVE.L D0,D7 //004d80 2c00 MOVE.L D0,D6 //004d82 602a BRA $+44 (=0x004dae) case 2: D6W = D1W; break; //004d84 3c01 MOVE.W D1,D6 //004d86 2e00 MOVE.L D0,D7 //004d88 6024 BRA $+38 (=0x004dae) case 3: D6L = D1L; break; //004d8a 2e00 MOVE.L D0,D7 //004d8c 2c01 MOVE.L D1,D6 //004d8e 601e BRA $+32 (=0x004dae) case 4: D7L = D0L; break; //004d90 2c00 MOVE.L D0,D6 //004d92 3e01 MOVE.W D1,D7 //004d94 6018 BRA $+26 (=0x004dae) case 5: D6L = D0L; D7L = D0L; break; //004d96 3e01 MOVE.W D1,D7 //004d98 3c01 MOVE.W D1,D6 //004d9a 6012 BRA $+20 (=0x004dae) case 6: D6W = D1W; D7L = D0L; break; //004d9c 2c01 MOVE.L D1,D6 //004d9e 3e01 MOVE.W D1,D7 //004da0 600c BRA $+14 (=0x004dae) case 7: D6L = D1L; D7L = D0L; break; //004da2 2c00 MOVE.L D0,D6 //004da4 6006 BRA $+8 (=0x004dac) case 8: D7W = D1W; break; //004da6 3c01 MOVE.W D1,D6 //004da8 6002 BRA $+4 (=0x004dac) case 9: D6L = D0L; D7W = D1W; break; //004daa 2c01 MOVE.L D1,D6 //004dac 2e01 MOVE.L D1,D7 case 10: D6W = D1W; D7W = D1W; break; //004dae 8082 OR.L D2,D0 //004db0 4680 NOT.L D0 case 11: D6L = D1L; D7W = D1W; break; case 12: D7L = D1L; break; case 13: D6L = D0L; D7L = D1L; break; case 14: D6W = D1W; D7L = D1L; break; case 15: D6L = D1L; D7L = D1L; break; case 0: break; default: NotImplemented(0x4db0); }; //004db2 4240 CLR.W D0 //004db4 8282 OR.L D2,D1 D0L |= D2L; D0L ^= 0xffffffff; //004db6 4681 NOT.L D1 D0W = 0; D1L |= D2L; D1L ^= 0xffffffff; switch (jA1&0xffff) { //004db8 4ed1 JMP (A1) //004dba 8e80 OR.L D0,D7 //004dbc 8c80 OR.L D0,D6 //004dbe 602a BRA $+44 (=0x004dea) case 1: D6L |= D0L; break; //004dc0 8c41 OR.W D1,D6 //004dc2 8e80 OR.L D0,D7 case 2: D6L |= D1L; break; //004dc4 6024 BRA $+38 (=0x004dea) //004dc6 8e80 OR.L D0,D7 //004dc8 8c81 OR.L D1,D6 case 3: D6L |= D1L; break; //004dca 601e BRA $+32 (=0x004dea) //004dcc 8c80 OR.L D0,D6 case 4: D7L |= D0L; break; //004dce 8e41 OR.W D1,D7 //004dd0 6018 BRA $+26 (=0x004dea) case 5: D6L |= D0L; D7L |= D0L; break; //004dd2 8e41 OR.W D1,D7 //004dd2 8e41 OR.W D1,D7 //004dd4 8c41 OR.W D1,D6 case 6: D6L |= D1L; D7L |= D0L; break; //004dd6 6012 BRA $+20 (=0x004dea) //004dd8 8c81 OR.L D1,D6 //004dda 8e41 OR.W D1,D7 //004ddc 600c BRA $+14 (=0x004dea) case 7: D6L |= D1L; D7L |= D0L; break; //004dde 8c80 OR.L D0,D6 //004de0 6006 BRA $+8 (=0x004de8) case 8: D7L |= D1L; break; //004de2 8c41 OR.W D1,D6 //004de4 6002 BRA $+4 (=0x004de8) case 9: D6L |= D0L; D7L |= D1L; break; //004de6 8c81 OR.L D1,D6 //004de8 8e81 OR.L D1,D7 case 10: D6L |= D1L; D7L |= D1L; break; case 11: D6L |= D1L; D7L |= D1L; break; case 12: D7L |= D1L; break; case 13: D6L |= D0L; D7L |= D1L; break; case 14: D6L |= D1L; D7L |= D1L; break; case 15: D6L |= D1L; D7L |= D1L; break; case 0: break; default: NotImplemented(0x4de8); } //004dea 8d94 OR.L D6,(A4) //004dec 8fac 0004 OR.L D7,4(A4) longGear(A3+0) |= LE32(D6L); longGear(A3+4) |= LE32(D7L); //004df0 5344 SUBQ.W #1,D4 D4W--; //004df2 6602 BNE $+4 (=0x004df6) if (D4W==0) return; //004df4 4e75 RTS //004df6 d4fc 0046 ADD.W #70,A2 A2+=70; //004dfa d8ee 000c ADD.W 12(A6),A4 A3 += A3inc; //004dfe 6000 ff4a BRA $-180 (=0x004d4a) goto loop; } // ********************************************************* // // ********************************************************* // TAG004bbc void TextOutB(pnt dest, i32 destWidth, i32 x, i32 y, i32 color, i32 P6, const char *text) { dReg D2, D3, D4, D5, D6, D7; i32 saveD2; aReg A2, A4, saveA2, saveA4; const char *A0; i32 jA0, jA1; A2 = NULL; //004bbc 4e56 0000 LINK A6,#0 //004bc0 48e7 0f18 MOVEM.L D4567A34,-(A7) //004bc4 286e 0008 MOVE.L 8(A6),A4 //004bc8 3e2e 000e MOVE.W 14(A6),D7 //004bcc 3c2e 0010 MOVE.W 16(A6),D6 //004bd0 3a2e 0012 MOVE.W 18(A6),D5 //004bd4 382e 0014 MOVE.W 20(A6),D4 //004bd8 206e 0016 MOVE.L 22(A6),A0 A4 = dest; D7W = sw(x); D6W = sw(y); //D5W = P5; D4W = sw(P6); A0 = text; //004bdc 4a10 TST.B (A0) //004bde 6700 0222 BEQ $+548 (=0x004e02) if (*A0 == 0) return; //004be2 3006 MOVE.W D6,D0 //004be4 5940 SUBQ.W #4,D0 //004be6 c0ee 000c MULU 12(A6),D0 //004bea d8c0 ADD.W D0,A4 A4 += (D6W - 4) * destWidth; //004bec 3007 MOVE.W D7,D0 //004bee 0240 fff0 AND.W #65520,D0 //004bf2 e248 LSR.W #1,D0 //004bf4 d8c0 ADD.W D0,A4 A4 += (D7W & 0xfff0)>>1; //004bf6 760f MOVEQ.L #15,D3 //004bf8 c647 AND.W D7,D3 D3W = (UI16)(D7W & 15); //004bfa 3205 MOVE.W D5,D1 //004bfc da45 ADD.W D5,D5 //004bfe da41 ADD.W D1,D5 //004c00 da45 ADD.W D5,D5 //004c02 4efb 5002 JMP 2(PC,D5W) jA0 = color; // 16 colors //004c06 41fa 01a6 LEA $+424 (=0x004dae),A0 //004c0a 6058 BRA $+90 (=0x004c64) //004c0c 41fa 0172 LEA $+372 (=0x004d80),A0 //004c10 6052 BRA $+84 (=0x004c64) //004c12 41fa 0184 LEA $+390 (=0x004d98),A0 //004c16 604c BRA $+78 (=0x004c64) //004c18 41fa 0172 LEA $+372 (=0x004d8c),A0 //004c1c 6046 BRA $+72 (=0x004c64) //004c1e 41fa 0166 LEA $+360 (=0x004d86),A0 //004c22 6040 BRA $+66 (=0x004c64) //004c24 41fa 0158 LEA $+346 (=0x004d7e),A0 //004c28 603a BRA $+60 (=0x004c64) //004c2a 41fa 0158 LEA $+346 (=0x004d84),A0 //004c2e 6034 BRA $+54 (=0x004c64) //004c30 41fa 0158 LEA $+346 (=0x004d8a),A0 //004c34 602e BRA $+48 (=0x004c64) //004c36 41fa 015a LEA $+348 (=0x004d92),A0 //004c3a 6028 BRA $+42 (=0x004c64) //004c3c 41fa 0152 LEA $+340 (=0x004d90),A0 //004c40 6022 BRA $+36 (=0x004c64) //004c42 41fa 0152 LEA $+340 (=0x004d96),A0 //004c46 601c BRA $+30 (=0x004c64) //004c48 41fa 0152 LEA $+340 (=0x004d9c),A0 //004c4c 6016 BRA $+24 (=0x004c64) //004c4e 41fa 015c LEA $+350 (=0x004dac),A0 //004c52 6010 BRA $+18 (=0x004c64) //004c54 41fa 014c LEA $+334 (=0x004da2),A0 //004c58 600a BRA $+12 (=0x004c64) //004c5a 41fa 014a LEA $+332 (=0x004da6),A0 //004c5e 6004 BRA $+6 (=0x004c64) //004c60 41fa 0148 LEA $+330 (=0x004daa),A0 //004c64 3204 MOVE.W D4,D1 //004c66 d844 ADD.W D4,D4 //004c68 d841 ADD.W D1,D4 //004c6a d844 ADD.W D4,D4 //004c6c 4efb 4002 JMP 2(PC,D4W) jA1 = D4W; //004c70 43fa 0178 LEA $+378 (=0x004dea),A1 //004c74 6058 BRA $+90 (=0x004cce) //004c76 43fa 0144 LEA $+326 (=0x004dbc),A1 //004c7a 6052 BRA $+84 (=0x004cce) //004c7c 43fa 0156 LEA $+344 (=0x004dd4),A1 //004c80 604c BRA $+78 (=0x004cce) //004c82 43fa 0144 LEA $+326 (=0x004dc8),A1 //004c86 6046 BRA $+72 (=0x004cce) //004c88 43fa 0138 LEA $+314 (=0x004dc2),A1 //004c8c 6040 BRA $+66 (=0x004cce) //004c8e 43fa 012a LEA $+300 (=0x004dba),A1 //004c92 603a BRA $+60 (=0x004cce) //004c94 43fa 012a LEA $+300 (=0x004dc0),A1 //004c98 6034 BRA $+54 (=0x004cce) //004c9a 43fa 012a LEA $+300 (=0x004dc6),A1 //004c9e 602e BRA $+48 (=0x004cce) //004ca0 43fa 012c LEA $+302 (=0x004dce),A1 //004ca4 6028 BRA $+42 (=0x004cce) //004ca6 43fa 0124 LEA $+294 (=0x004dcc),A1 //004caa 6022 BRA $+36 (=0x004cce) //004cac 43fa 0124 LEA $+294 (=0x004dd2),A1 //004cb0 601c BRA $+30 (=0x004cce) //004cb2 43fa 0124 LEA $+294 (=0x004dd8),A1 //004cb6 6016 BRA $+24 (=0x004cce) //004cb8 43fa 012e LEA $+304 (=0x004de8),A1 //004cbc 6010 BRA $+18 (=0x004cce) //004cbe 43fa 011e LEA $+288 (=0x004dde),A1 //004cc2 600a BRA $+12 (=0x004cce) //004cc4 43fa 011c LEA $+286 (=0x004de2),A1 //004cc8 6004 BRA $+6 (=0x004cce) //004cca 43fa 011a LEA $+284 (=0x004de6),A1 tag004cce: for (;;) { do { //004cce 7400 MOVEQ.L #0,D2 D2L = 0; //004cd0 246e 0016 MOVE.L 22(A6),A2 //004cd4 1412 MOVE.B (A2),D2 D2B = *text; if (D2W ==0) return; //004cd6 6700 012a BEQ $+300 (=0x004e02) //004cda 52ae 0016 ADDQ.L #1,22(A6) text++; //004cde 0442 0020 SUB.W #32,D2 //004ce2 45ed fb02 LEA -1278(A5),A2 //004ce6 45f2 2000 LEA 0(A2,D2W),A2 A2 = Byte1278 + D2W - 32; //004cea 0c43 000b CMP.W #11,D3 //004cee 6222 BHI $+36 (=0x004d12) if (D3W > 11) goto tag004d12; //004cf0 7806 MOVEQ.L #6,D4 //004cf2 243c 07ff 07ff MOVE.L #134154239,D2 D4L = 6; D2L = 0x07ff07ff; //004cf8 e6ba ROR.L D3,D2 D2L >>= D3W; D2H1 = D2W; //004cfa 7a00 MOVEQ.L #0,D5 D5L = 0; //004cfc 2f0c MOVE.L A4,-(A7) //004cfe 614a BSR $+76 (=0x004d4a) TAG004d4a(D2, D3, D4, D5, A2, A4, destWidth, jA0, jA1); //004d00 285f MOVE.L (A7)+,A4 //004d02 5c43 ADDQ.W #6,D3 D3W += 6; //004d04 0c43 0010 CMP.W #16,D3 //004d08 65c4 BCS $-58 (=0x004cce) } while (D3W < 16); //004d0a 0243 0001 AND.W #1,D3 D3W &= 1; A4 += 8; //004d0e 508c ADDQ.L #0,A4 //004d10 60bc BRA $-66 (=0x004cce) }; tag004d12: //004d12 7806 MOVEQ.L #6,D4 D4L = 6; //004d14 2f0c MOVE.L A4,-(A7) saveA4 = A4 + 8; //004d16 5097 ADDQ.L #0,(A7) //004d18 2f0a MOVE.L A2,-(A7) saveA2 = A2; //004d1a e54b LSL.W #2,D3 //004d1c 45ed fc76 LEA -906(A5),A2 //004d20 2432 3000 MOVE.L 0(A2,D3W),D2 D2L = Long954[D3W-12]; //004d24 45ed fc86 LEA -890(A5),A2 //004d28 2f32 3000 MOVE.L 0(A2,D3W),-(A7) saveD2 = Long938[D3W-12]; //004d2c e44b LSR.W #2,D3 //004d2e 246f 0004 MOVE.L 4(A7),A2 A2 = saveA2; //004d32 7a08 MOVEQ.L #8,D5 D5L = 8; //004d34 6114 BSR $+22 (=0x004d4a) TAG004d4a(D2, D3, D4, D5, A2, A4, destWidth, jA0, jA1); //004d36 241f MOVE.L (A7)+,D2 D2L = saveD2; //004d38 245f MOVE.L (A7)+,A2 A2 = saveA2; //004d3a 2857 MOVE.L (A7),A4 A4 = saveA4;; //004d3c 7806 MOVEQ.L #6,D4 D4L = 6; //004d3e 7a12 MOVEQ.L #18,D5 D5L = 18; //004d40 6108 BSR $+10 (=0x004d4a) TAG004d4a(D2, D3, D4, D5, A2, A4, destWidth, jA0, jA1); //004d42 285f MOVE.L (A7)+,A4 A4 = saveA4; //004d44 0443 000a SUB.W #10,D3 D3W -= 10; //004d48 6084 BRA $-122 (=0x004cce) goto tag004cce; //004e02 4cdf 18f0 MOVEM.L (A7)+,D4567A34 //004e06 4e5e UNLK A6 //004e08 4e75 RTS } // ********************************************************* // // ********************************************************* void TextToScreen(i32 xPixel,i32 yPixel,i32 P3,i32 P4,const char *P5) { TextOutB(e.PhysicalBase, 160, xPixel, yPixel, P3, P4, P5); } // ********************************************************* // // ********************************************************* i16 TAG004ec0(i32 P1) { aReg A1, A4; i16 *wA0; i32 i; //;;;;;;;;;;;;; //004ec0 4e56 fffe LINK A6,#-2 //004ec4 2f0c MOVE.L A4,-(A7) //004ec6 3b6e 0008 fcc6 MOVE.W 8(A6),-826(A5) e.Word826[0] = sw(P1); //004ecc 49fa 004e LEA $+80 (=0x004f1c),A4 //004ed0 302e 0008 MOVE.W 8(A6),D0 //004ed4 0640 fff6 ADD.W #65526,D0 //004ed8 c1fc 0003 MULS #3,D0 //004edc d8c0 ADD.W D0,A4 ASSERT(P1<111); //Else expand table A4 = data004f1c + 3 * (P1-10); //004ede 7001 MOVEQ.L #1,D0 //004ee0 3d40 fffe MOVE.W D0,-2(A6) //004ee4 601c BRA $+30 (=0x004f02) for (i=1; i<5; i++) { //004ee6 302e fffe MOVE.W -2(A6),D0 //004eea 48c0 EXT.L D0 //004eec d080 ADD.L D0,D0 //004eee 41ed fcc6 LEA -826(A5),A0 //004ef2 d1c0 ADD.L D0,A0 wA0 = &e.Word826[i]; //004ef4 43d4 LEA (A4),A1 A1 = A4; //004ef6 528c ADDQ.L #1,A4 A4 += 1; //004ef8 7000 MOVEQ.L #0,D0 //004efa 1011 MOVE.B (A1),D0 //004efc 3080 MOVE.W D0,(A0) *wA0 = (UI16)(*A1 & 0xff); // //004efe 526e fffe ADDQ.W #1,-2(A6) // //004f02 0c6e 0004 fffe CMP.W #4,-2(A6) //004f08 6ddc BLT $-34 (=0x004ee6) }; //004f0a 2f2d fd4e MOVE.L -690(A5),-(A7) //004f0e 4eba ff92 JSR $-108 (=0x004ea2) //004f12 588f ADDQ.L #4,A7 TAG004ea2(e.Pnt714[6]); //004f14 302d fd12 MOVE.W -750(A5),D0 //004f18 6000 015e BRA $+352 (=0x005078) return e.Word750[0]; // // //file = chaos.ftl offset =6a48 // //005078 285f MOVE.L (A7)+,A4 //00507a 4e5e UNLK A6 //00507c 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG00507e(void) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //00507e 4e56 fffe LINK A6,#-2 //005082 41ed fcc6 LEA -826(A5),A0 //005086 2b48 fd36 MOVE.L A0,-714(A5) e.Pnt714[0] = e.Word826; //00508a 41ed fcd0 LEA -816(A5),A0 //00508e 2b48 fd3a MOVE.L A0,-710(A5) e.Pnt714[1] = e.Word816; //005092 41ed fcf0 LEA -784(A5),A0 //005096 2b48 fd3e MOVE.L A0,-706(A5) e.Pnt714[2] = e.Word784; //00509a 41ed fd12 LEA -750(A5),A0 //00509e 2b48 fd42 MOVE.L A0,-702(A5) e.Pnt714[3] = e.Word750; //0050a2 41ed fd22 LEA -734(A5),A0 //0050a6 2b48 fd46 MOVE.L A0,-698(A5) e.Pnt714[4] = e.Word734; //0050aa 41ed fd2e LEA -722(A5),A0 //0050ae 2b48 fd4a MOVE.L A0,-694(A5) e.Pnt714[5] = e.Word722; //0050b2 41ed fd36 LEA -714(A5),A0 //0050b6 2b48 fd4e MOVE.L A0,-690(A5) e.Pnt714[6] = (i16 *)e.Pnt714; //0050ba 3f3c 000a MOVE.W #10,-(A7) //0050be 4eba fe00 JSR $-510 (=0x004ec0) //0050c2 548f ADDQ.L #2,A7 TAG004ec0(10); //0050c4 3b6d fd12 fd52 MOVE.W -750(A5),-686(A5) e.Word686 = e.Word750[0]; //0050ca 302d fd52 MOVE.W -686(A5),D0 return e.Word686; //0050ce 4e5e UNLK A6 //0050d0 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG0050d2(void) { //0050d2 3f3c 0013 MOVE.W #19,-(A7) //0050d6 4eba fde8 JSR $-534 (=0x004ec0) //0050da 548f ADDQ.L #2,A7 TAG004ec0(19); //0050dc 7001 MOVEQ.L #1,D0 return 1; //0050de 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG005868(i16 *P1, i16 *P2, i16 *P3, i16 *P4) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //005868 4e56 0000 LINK A6,#0 //00586c 3f3c 004d MOVE.W #77,-(A7) //005870 4eba f64e JSR $-2480 (=0x004ec0) //005874 548f ADDQ.L #2,A7 TAG004ec0(77); //005876 206e 0008 MOVE.L 8(A6),A0 //00587a 30ad fd14 MOVE.W -748(A5),(A0) *P1 = e.Word750[1]; //00587e 206e 000c MOVE.L 12(A6),A0 //005882 30ad fd16 MOVE.W -746(A5),(A0) *P2 = e.Word750[2]; //005886 206e 0010 MOVE.L 16(A6),A0 //00588a 30ad fd18 MOVE.W -744(A5),(A0) *P3 = e.Word750[3]; //00588e 206e 0014 MOVE.L 20(A6),A0 //005892 30ad fd1a MOVE.W -742(A5),(A0) *P4 = e.Word750[4]; //005896 302d fd12 MOVE.W -750(A5),D0 return e.Word750[0]; //00589a 4e5e UNLK A6 //00589c 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG00589e(i16 P1, i16 P2) { //;;;;;;;;;;;;;;;; //00589e 4e56 0000 LINK A6,#0 //0058a2 3b6e 0008 fcf0 MOVE.W 8(A6),-784(A5) e.Word784[0] = P1; //0058a8 2b6e 000a fd22 MOVE.L 10(A6),-734(A5) e.Word734[0] = P2; //0058ae 3f3c 004e MOVE.W #78,-(A7) //0058b2 4eba f60c JSR $-2546 (=0x004ec0) //0058b6 548f ADDQ.L #2,A7 TAG004ec0(78); //0058b8 4e5e UNLK A6 //0058ba 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG005c92(char *P1) { //Splits an address into two words. dReg D0; //;;;;;;;;;;;;;;;;;;;;;;;;;;; //005c92 4e56 0000 LINK A6,#0 //005c96 202e 0008 MOVE.L 8(A6),D0 //005c9a 7210 MOVEQ.L #16,D1 //005c9c e2a0 LSR.L D1,D0 D0L = (i32)P1 >> 16; //005c9e 3b40 dc6c MOVE.W D0,-9108(A5) e.Word9108 = D0W; //005ca2 203c 0000 ffff MOVE.L #65535,D0 //005ca8 c0ae 0008 AND.L 8(A6),D0 //005cac 3b40 dc6e MOVE.W D0,-9106(A5) e.Word9106 = (UI16)((i32)P1 & 0xffff); //005cb0 4e5e UNLK A6 //005cb2 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG005cd6(char * *P1) { //Reassemble a pointer from two words. dReg D0; //;;;;;;;;;;;;;;;; //005cd6 4e56 0000 LINK A6,#0 //005cda 7000 MOVEQ.L #0,D0 //005cdc 302d dc70 MOVE.W -9104(A5),D0 D0L = e.Word9104 << 16; //005ce0 7210 MOVEQ.L #16,D1 //005ce2 e3a8 LSL.L D1,D0 //005ce4 7200 MOVEQ.L #0,D1 //005ce6 322d dc72 MOVE.W -9102(A5),D1 D0W = e.Word9102; //005cea 8081 OR.L D1,D0 //005cec 206e 0008 MOVE.L 8(A6),A0 //005cf0 2080 MOVE.L D0,(A0) *P1 = (pnt)D0L; //005cf2 4e5e UNLK A6 //005cf4 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG005cf6(void) { //;;;;;;;;;;;;;;;;;;;;;;;;; //Trap #2 with parameter 115 does do something on the //Atari. I don't know what. HopefullyNotNeeded(); //005cf6 486d dc5e PEA -9122(A5) //005cfa 2b5f fd64 MOVE.L (A7)+,-668(A5) //005cfe 486d fd64 PEA -668(A5) //005d02 221f MOVE.L (A7)+,D1 //005d04 2b4a fd78 MOVE.L A2,-648(A5) //005d08 7073 MOVEQ.L #115,D0 //005d0a 4e42 TRAP #2 //005d0c 246d fd78 MOVE.L -648(A5),A2 //005d10 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG005d12(i16 *,i16 *,i16 *) { NotImplemented(0x5d12); } // ********************************************************* // // ********************************************************* void TAG005d8e(i16 *P1, i16 *P2, i16 *P3) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //005d8e 4e56 0000 LINK A6,#0 //005d92 2b6e 0008 fd68 MOVE.L 8(A6),-664(A5) e.pw664 = P1; //005d98 2b6e 0010 fd70 MOVE.L 16(A6),-656(A5) e.pw656 = P3; //005d9e 206e 0010 MOVE.L 16(A6),A0 //005da2 41e8 005a LEA 90(A0),A0 //005da6 2b48 fd74 MOVE.L A0,-652(A5) e.pw652 = P3 + 45; //005daa 7064 MOVEQ.L #100,D0 //005dac 3b40 dc5e MOVE.W D0,-9122(A5) e.Word9122 = 100; //005db0 426d dc60 CLR.W -9120(A5) e.Word9120 = 0; //005db4 700b MOVEQ.L #11,D0 //005db6 3b40 dc64 MOVE.W D0,-9116(A5) e.Word9116 = 11; //005dba 206e 000c MOVE.L 12(A6),A0 //005dbe 3b50 dc6a MOVE.W (A0),-9110(A5) e.Word9110 = *P2; //005dc2 4eba ff32 JSR $-204 (=0x005cf6) TAG005cf6(); //005dc6 206e 000c MOVE.L 12(A6),A0 //005dca 30ad dc6a MOVE.W -9110(A5),(A0) *P2 = e.Word9110; //005dce 41ed dc76 LEA -9098(A5),A0 //005dd2 2b48 fd68 MOVE.L A0,-664(A5) e.pw664 = &e.Word9098; //005dd6 41ed dd76 LEA -8842(A5),A0 //005dda 2b48 fd70 MOVE.L A0,-656(A5) e.pw656 = e.Word8842; //005dde 41ed df76 LEA -8330(A5),A0 //005de2 2b48 fd74 MOVE.L A0,-652(A5) e.pw652 = e.Word8330; //005de6 41ed de76 LEA -8586(A5),A0 //005dea 2b48 fd6c MOVE.L A0,-660(A5) e.Pnt660 = e.Byte8586; //005dee 4e5e UNLK A6 //005df0 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG005df2(i16 P1) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //005df2 4e56 0000 LINK A6,#0 //005df6 7065 MOVEQ.L #101,D0 //005df8 3b40 dc5e MOVE.W D0,-9122(A5) e.Word9122 = 101; //005dfc 426d dc60 CLR.W -9120(A5) e.Word9120 = 0; //005e00 426d dc64 CLR.W -9116(A5) e.Word9116 = 0; //005e04 3b6e 0008 dc6a MOVE.W 8(A6),-9110(A5) e.Word9110 = P1; //005e0a 4eba feea JSR $-276 (=0x005cf6) TAG005cf6(); //005e0e 4e5e UNLK A6 //005e10 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG0061ba(i16 P1, i16 P2) { //;;;;;;;;;;;;;;;; //0061ba 4e56 0000 LINK A6,#0 //0061be 3b6e 000a dc76 MOVE.W 10(A6),-9098(A5) e.Word9098 = P2; //0061c4 707a MOVEQ.L #122,D0 //0061c6 3b40 dc5e MOVE.W D0,-9122(A5) e.Word9122 = 122; //0061ca 426d dc60 CLR.W -9120(A5) e.Word9120 = 0; //0061ce 7001 MOVEQ.L #1,D0 //0061d0 3b40 dc64 MOVE.W D0,-9116(A5) e.Word9116 = 1; //0061d4 3b6e 0008 dc6a MOVE.W 8(A6),-9110(A5) e.Word9110 = P1; //0061da 4eba fb1a JSR $-1252 (=0x005cf6) TAG005cf6(); //0061de 4e5e UNLK A6 //0061e0 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG0061e2(i16 P1) { //;;;;;;;;;;;;;;;;;;; //0061e2 4e56 0000 LINK A6,#0 //0061e6 707b MOVEQ.L #123,D0 //0061e8 3b40 dc5e MOVE.W D0,-9122(A5) e.Word9122 = 123; //0061ec 426d dc60 CLR.W -9120(A5) //0061f0 426d dc64 CLR.W -9116(A5) e.Word9120 = 0; e.Word9116 = 0; //0061f4 3b6e 0008 dc6a MOVE.W 8(A6),-9110(A5) e.Word9110 = P1; //0061fa 4eba fafa JSR $-1284 (=0x005cf6) TAG005cf6(); //0061fe 4e5e UNLK A6 //006200 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG006202(i16 P1, i16 *P2, i16 *P3, i16 *P4) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //006202 4e56 0000 LINK A6,#0 //006206 707c MOVEQ.L #124,D0 //006208 3b40 dc5e MOVE.W D0,-9122(A5) e.Word9122 = 124; //00620c 426d dc60 CLR.W -9120(A5) //006210 426d dc64 CLR.W -9116(A5) e.Word9120 = 0; e.Word9116 = 0; //006214 3b6e 0008 dc6a MOVE.W 8(A6),-9110(A5) e.Word9110 = P1; //00621a 4eba fada JSR $-1316 (=0x005cf6) TAG005cf6(); //00621e 206e 000a MOVE.L 10(A6),A0 //006222 30ad dd76 MOVE.W -8842(A5),(A0) *P2 = e.Word8842[0]; //006226 206e 000e MOVE.L 14(A6),A0 //00622a 30ad df76 MOVE.W -8330(A5),(A0) *P3 = e.Word8330[0]; //00622e 206e 0012 MOVE.L 18(A6),A0 //006232 30ad df78 MOVE.W -8328(A5),(A0) *P4 = e.Word8328[0]; //006236 4e5e UNLK A6 //006238 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG00623a(i16 P1, char *P2, char * *P3) { //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //00623a 4e56 0000 LINK A6,#0 //00623e 2f2e 000a MOVE.L 10(A6),-(A7) //006242 4eba fa4e JSR $-1456 (=0x005c92) //006246 588f ADDQ.L #4,A7 TAG005c92(P2); //006248 707d MOVEQ.L #125,D0 //00624a 3b40 dc5e MOVE.W D0,-9122(A5) e.Word9122 = 125; //00624e 426d dc60 CLR.W -9120(A5) //006252 426d dc64 CLR.W -9116(A5) e.Word9120 = 0; e.Word9116 = 0; //006256 3b6e 0008 dc6a MOVE.W 8(A6),-9110(A5) e.Word9110 = P1; //00625c 4eba fa98 JSR $-1382 (=0x005cf6) TAG005cf6(); //006260 2f2e 000e MOVE.L 14(A6),-(A7) //006264 4eba fa70 JSR $-1422 (=0x005cd6) //006268 588f ADDQ.L #4,A7 TAG005cd6(P3); //00626a 4e5e UNLK A6 //00626c 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG00626e(i16 P1, char *P2, char * *P3) { //;;;;;;;;;;;;;;;;;; //00626e 4e56 0000 LINK A6,#0 //006272 2f2e 000a MOVE.L 10(A6),-(A7) //006276 4eba fa1a JSR $-1508 (=0x005c92) //00627a 588f ADDQ.L #4,A7 TAG005c92(P2); //00627c 707e MOVEQ.L #126,D0 //00627e 3b40 dc5e MOVE.W D0,-9122(A5) e.Word9122 = 126; //006282 426d dc60 CLR.W -9120(A5) //006286 426d dc64 CLR.W -9116(A5) e.Word9120 = 0; e.Word9116 = 0; //00628a 3b6e 0008 dc6a MOVE.W 8(A6),-9110(A5) e.Word9110 = P1; //006290 4eba fa64 JSR $-1434 (=0x005cf6) TAG005cf6(); //006294 2f2e 000e MOVE.L 14(A6),-(A7) //006298 4eba fa3c JSR $-1474 (=0x005cd6) //00629c 588f ADDQ.L #4,A7 TAG005cd6(P3); //00629e 4e5e UNLK A6 //0062a0 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG0064b4 pnt FormatInteger(pnt rslt, ui32 num, i16 hex) { dReg D5, D6; aReg A3, A4; static char digits[] = "0123456789ABCDEF"; char b_12[12]; A4 = rslt; D6L = 0; A3 = b_12; D5W = (UI16)(hex ? 16 : 10); do { *(A3++) = digits[num % D5W]; num /= D5W; D6W++; } while (num != 0); while ((D6W--) != 0) { *(A4++) = *(--A3); }; return A4; } // ********************************************************* // // ********************************************************* // TAG0065e0 i32 atari_sprintf(pnt dst, pnt fmt, i32 V1, i32, i32) { // returns length of result dReg D5; aReg A2, A3, A4; bool fmtSpec, lSpec, uSpec, hex; pnt pnt_8; pnt pnt_4; //;;;;;;;;;;;;;;;;;; //0065e0 4e56 fff8 LINK A6,#-8 //0065e4 48e7 1f38 MOVEM.L D34567A234,-(A7) //0065e8 286e 0008 MOVE.L 8(A6),A4 A4 = dst; //0065ec 7e00 MOVEQ.L #0,D7 //0065ee 7c01 MOVEQ.L #1,D6 //0065f0 2d4c fff8 MOVE.L A4,-8(A6) pnt_8 = A4; //0065f4 266e 000c MOVE.L 12(A6),A3 A3 = fmt; //0065f8 41ee 0010 LEA 16(A6),A0 //0065fc 2d48 fffc MOVE.L A0,-4(A6) pnt_4 = (pnt)&V1; //006600 6000 00e4 BRA $+230 (=0x0066e6) while (*A3 != 0) { //006604 0c13 0025 CMP.B #37,(A3) //006608 670a BEQ $+12 (=0x006614) if (*A3 != '%') { //00660a 41d4 LEA (A4),A0 //00660c 528c ADDQ.L #1,A4 //00660e 1093 MOVE.B (A3),(A0) *(A4++) = *(A3++); //006610 6000 00d2 BRA $+212 (=0x0066e4) continue; // That was rather the easier case. }; //006614 528b ADDQ.L #1,A3 A3++; fmtSpec=true; lSpec = false; uSpec = false; while (fmtSpec) { //006616 1013 MOVE.B (A3),D0 //006618 4880 EXT.W D0 //00661a 4ead 002a JSR 42(A5) (=0x000092) switch (*(A3++)) { //00661e 0005 0016 OR.B #22,D5 //006622 006c 0016 0075 OR.W #22,117(A4) //006628 0016 0064 OR.B #100,(A6) //00662c 0012 0078 OR.B #120,(A2) //006630 0090 0073 00a6 OR.L #7536806,(A0) case 'l': //006636 7e01 MOVEQ.L #1,D7 lSpec = true; //006638 60da BRA $-36 (=0x006614) break; case 'u': //00663a 7c00 MOVEQ.L #0,D6 uSpec = true; //00663c 60d6 BRA $-40 (=0x006614) break; case 'd': case 'x': //00663e 0c13 0064 CMP.B #100,(A3) //006642 57c0 SEQ D0 //006644 4400 NEG.B D0 //006646 4880 EXT.W D0 //006648 3600 MOVE.W D0,D3 hex = (*A3 == 'x'); //00664a 4a47 TST.W D7 //00664c 672c BEQ $+46 (=0x00667a) if (lSpec) { //00664e 206e fffc MOVE.L -4(A6),A0 //006652 58ae fffc ADDQ.L #4,-4(A6) //006656 2a10 MOVE.L (A0),D5 D5L = longGear(pnt_4);//next value pnt_4 += 4; //006658 4a46 TST.W D6 //00665a 6700 004a BEQ $+76 (=0x0066a6) //00665e 4a43 TST.W D3 //006660 6744 BEQ $+70 (=0x0066a6) if ((!uSpec) && (!hex)) { //006662 203c 8000 0000 MOVE.L #-2147483648,D0 //006668 c085 AND.L D5,D0 //00666a 4a80 TST.L D0 //00666c 6738 BEQ $+58 (=0x0066a6) if (D5L & 0x80000000) { //00666e 41d4 LEA (A4),A0 //006670 528c ADDQ.L #1,A4 //006672 702d MOVEQ.L #45,D0 *(A4++) = '-'; //006674 1080 MOVE.B D0,(A0) //006676 4485 NEG.L D5 D5L = -D5L; } }; //006678 602c BRA $+46 (=0x0066a6) } else { //00667a 206e fffc MOVE.L -4(A6),A0 //00667e 54ae fffc ADDQ.L #2,-4(A6) //006682 3810 MOVE.W (A0),D4 D5L = longGear(pnt_4) & 0xffff; pnt_4+=4; //006684 4a46 TST.W D6 //006686 6718 BEQ $+26 (=0x0066a0) //006688 4a43 TST.W D3 //00668a 6714 BEQ $+22 (=0x0066a0) if ((!uSpec) && (!hex)) { //00668c 303c 8000 MOVE.W #32768,D0 //006690 c044 AND.W D4,D0 //006692 4a40 TST.W D0 //006694 670a BEQ $+12 (=0x0066a0) if (D5W & 0x8000) { //006696 41d4 LEA (A4),A0 //006698 528c ADDQ.L #1,A4 //00669a 702d MOVEQ.L #45,D0 //00669c 1080 MOVE.B D0,(A0) *(A4++) = '-'; //00669e 4444 NEG.W D4 D5W = sw(-D5W); //0066a0 7000 MOVEQ.L #0,D0 //0066a2 3004 MOVE.W D4,D0 //0066a4 2a00 MOVE.L D0,D5 }; }; }; //0066a6 4a43 TST.W D3 //0066a8 57c0 SEQ D0 //0066aa 4400 NEG.B D0 //0066ac 4880 EXT.W D0 //0066ae 3f00 MOVE.W D0,-(A7) //0066b0 2f05 MOVE.L D5,-(A7) //0066b2 2f0c MOVE.L A4,-(A7) //0066b4 4eba fdfe JSR $-512 (=0x0064b4) //0066b8 4fef 000a LEA 10(A7),A7 //0066bc 2840 MOVE.L D0,A4 A4 = FormatInteger(A4, D5L, hex); fmtSpec = false; //0066be 6020 BRA $+34 (=0x0066e0) break; case 's': //0066c0 206e fffc MOVE.L -4(A6),A0 //0066c4 58ae fffc ADDQ.L #4,-4(A6) //0066c8 2450 MOVE.L (A0),A2 A2 = pntGear(pnt_4); pnt_4 += 4; //0066ca 6008 BRA $+10 (=0x0066d4) while (*A2 != 0) { //0066cc 41d4 LEA (A4),A0 //0066ce 528c ADDQ.L #1,A4 //0066d0 1092 MOVE.B (A2),(A0) //0066d2 528a ADDQ.L #1,A2 *(A4++) = *(A2++); //0066d4 4a12 TST.B (A2) //0066d6 66f4 BNE $-10 (=0x0066cc) }; fmtSpec = false; //0066d8 6006 BRA $+8 (=0x0066e0) break; default: //0066da 41d4 LEA (A4),A0 //0066dc 528c ADDQ.L #1,A4 //0066de 1093 MOVE.B (A3),(A0) *(A4++) = *A3; fmtSpec = false; }; //case //0066e0 7e00 MOVEQ.L #0,D7 //0066e2 7c01 MOVEQ.L #1,D6 }; //while (fmtSpec) // //0066e4 528b ADDQ.L #1,A3 // //0066e6 4a13 TST.B (A3) //0066e8 6600 ff1a BNE $-228 (=0x006604) }; //0066ec 41d4 LEA (A4),A0 //0066ee 528c ADDQ.L #1,A4 //0066f0 4210 CLR.B (A0) *A4 = 0; //0066f2 200c MOVE.L A4,D0 //0066f4 90ae fff8 SUB.L -8(A6),D0 return A4-pnt_8; //0066f8 4cdf 1cf8 MOVEM.L (A7)+,D34567A234 //0066fc 4e5e UNLK A6 //0066fe 4e75 RTS } // ********************************************************* // // ********************************************************* // TAG006700 i32 GetPixel(pnt P1,i16 x,i16 y,i16 width) { dReg D0, D1, D2, D3, D5; aReg A0; //;;;;;;;;;;;;;;;;;; //006700 4e56 0000 LINK A6,#0 //006704 2245 MOVE.L D5,A1 //006706 322e 000c MOVE.W 12(A6),D1 D1W = x; //00670a 740f MOVEQ.L #15,D2 //00670c c441 AND.W D1,D2 D2W = (UI16)(D1W & 15); //00670e 206e 0008 MOVE.L 8(A6),A0 A0 = P1; //006712 302e 000e MOVE.W 14(A6),D0 //006716 c0ee 0010 MULU 16(A6),D0 D0L = y * width; //00671a e249 LSR.W #1,D1 //00671c 0241 00f8 AND.W #248,D1 D1W = (UI16)((D1W / 2) & 0xf8); //006720 d041 ADD.W D1,D0 D0W = sw(D0W + D1W); //006722 d0c0 ADD.W D0,A0 A0 += D0W; //006724 7a0f MOVEQ.L #15,D5 //006726 9a42 SUB.W D2,D5 D5W = sw(15 - D2W); //006728 4c90 000f MOVEM.W (A0),D0123 D0W = (UI16)(((LE16(wordGear(A0+0))>>D5W)<<0) & 1); D1W = (UI16)(((LE16(wordGear(A0+2))>>D5W)<<1) & 2); D2W = (UI16)(((LE16(wordGear(A0+4))>>D5W)<<2) & 4); D3W = (UI16)(((LE16(wordGear(A0+6))>>D5W)<<3) & 8); return D3W | D2W | D1W | D0W; } // ********************************************************* // // ********************************************************* pnt TAG0073b0(pnt P1) { dReg D0; aReg A0, A4; //;;;;;;;;;;;;;;;;;;;;;; //0073b0 4e56 0000 LINK A6,#0 //0073b4 2f0c MOVE.L A4,-(A7) //0073b6 206e 0008 MOVE.L 8(A6),A0 //0073ba 2050 MOVE.L (A0),A0 A0 = pntGear(P1); //0073bc 5588 SUBQ.L #2,A0 //0073be 2848 MOVE.L A0,A4 A4 = A0 - 2; //0073c0 7000 MOVEQ.L #0,D0 //0073c2 3014 MOVE.W (A4),D0 D0L = 0; D0W = wordGear(A4); //0073c4 0680 0000 000c ADD.L #12,D0 D0L += 12; //0073ca 99c0 SUB.L D0,A4 //0073cc 200c MOVE.L A4,D0 return A4 - D0L; //0073ce 285f MOVE.L (A7)+,A4 //0073d0 4e5e UNLK A6 //0073d2 4e75 RTS } // ********************************************************* // // ********************************************************* pnt TAG0073d4(pnt P1) { dReg D7; aReg A3, A4; //;;;;;;;;;;;;;;;;;;; //0073d4 4e56 0000 LINK A6,#0 //0073d8 48e7 0118 MOVEM.L D7A34,-(A7) //0073dc 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //0073e0 7e00 MOVEQ.L #0,D7 //0073e2 41ed fe5a LEA -422(A5),A0 //0073e6 2648 MOVE.L A0,A3 //0073e8 6014 BRA $+22 (=0x0073fe) for (D7L=0, A3=(pnt)&e.pDBank422; D7W= pntGear(A3)) { //0073ee 2013 MOVE.L (A3),D0 //0073f0 d0ab 0006 ADD.L 6(A3),D0 //0073f4 b9c0 CMP.L D0,A4 //0073f6 630c BLS $+14 (=0x007404) if (A4 <= pntGear(A3) + longGear(A3+6)) break; }; // //0073f8 5247 ADDQ.W #1,D7 //0073fa 47eb 0012 LEA 18(A3),A3 // //0073fe be6d fe58 CMP.W -424(A5),D7 //007402 65e6 BCS $-24 (=0x0073ea) }; //007404 be6d fe58 CMP.W -424(A5),D7 //007408 6602 BNE $+4 (=0x00740c) //00740a 97cb SUB.L A3,A3 if (D7W == e.Word424) A3=NULL; //00740c 200b MOVE.L A3,D0 return A3; //00740e 4cdf 1880 MOVEM.L (A7)+,D7A34 //007412 4e5e UNLK A6 //007414 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG007416(char *P1,char *P2) { aReg A2, A3, A4; //;;;;;;;;;; //007416 4e56 0000 LINK A6,#0 //00741a 48e7 0038 MOVEM.L A234,-(A7) //00741e 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //007422 246c 0004 MOVE.L 4(A4),A2 A2 = pntGear(A4+4); //007426 266c 0008 MOVE.L 8(A4),A3 A3 = pntGear(A4+8); //00742a 200a MOVE.L A2,D0 //00742c 6706 BEQ $+8 (=0x007434) if (A2 != NULL) { //00742e 254b 0008 MOVE.L A3,8(A2) pntGear(A2+8) = A3; //007432 6008 BRA $+10 (=0x00743c) } else { //007434 206e 000c MOVE.L 12(A6),A0 //007438 214b 000a MOVE.L A3,10(A0) pntGear(P2+10) = A3; }; //00743c 200b MOVE.L A3,D0 //00743e 6704 BEQ $+6 (=0x007444) if (A3 != NULL) pntGear(A3+4) = A2; //007440 274a 0004 MOVE.L A2,4(A3) //007444 4cdf 1c00 MOVEM.L (A7)+,A234 //007448 4e5e UNLK A6 //00744a 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG00744c(char *P1,char *P2) { dReg D7; aReg A2, A3, A4; //;;;;;;;;;;;;;;;;;;;;;;;;;; //00744c 4e56 0000 LINK A6,#0 //007450 48e7 0138 MOVEM.L D7A234,-(A7) //007454 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //007458 206e 000c MOVE.L 12(A6),A0 //00745c 2668 000a MOVE.L 10(A0),A3 A3 = pntGear(P2+10); //007460 95ca SUB.L A2,A2 A2 = NULL; //007462 203c 7fff ffff MOVE.L #2147483647,D0 //007468 c094 AND.L (A4),D0 //00746a 2e00 MOVE.L D0,D7 D7L = longGear(A4) & 0x7fffffff; //00746c 6012 BRA $+20 (=0x007480) while (A3 != NULL) { //00746e 203c 7fff ffff MOVE.L #2147483647,D0 //007474 c093 AND.L (A3),D0 //007476 be80 CMP.L D0,D7 //007478 620a BHI $+12 (=0x007484) if (D7L <= (longGear(A3) & 0x7fffffff)) //00747a 244b MOVE.L A3,A2 A2 = A3; //00747c 266b 0008 MOVE.L 8(A3),A3 A3 = pntGear(A3+8); // //007480 200b MOVE.L A3,D0 //007482 66ea BNE $-20 (=0x00746e) }; //007484 200a MOVE.L A2,D0 //007486 6706 BEQ $+8 (=0x00748e) if (A2 != NULL) { //007488 254c 0008 MOVE.L A4,8(A2) //00748c 6008 BRA $+10 (=0x007496) pntGear(A2+8) = A4; } else { //00748e 206e 000c MOVE.L 12(A6),A0 //007492 214c 000a MOVE.L A4,10(A0) pntGear(P2+10) = A4; }; //007496 200b MOVE.L A3,D0 //007498 6704 BEQ $+6 (=0x00749e) if (A3 != NULL) { //00749a 274c 0004 MOVE.L A4,4(A3) pntGear(A3+4) = A4; }; //00749e 294b 0008 MOVE.L A3,8(A4) pntGear(A4+8) = A3; //0074a2 294a 0004 MOVE.L A2,4(A4) pntGear(A4+4) = A2; //0074a6 4cdf 1c80 MOVEM.L (A7)+,D7A234 //0074aa 4e5e UNLK A6 //0074ac 4e75 RTS } void TAG0074ae(char *P1,i32 P2,char *P3) { dReg D6, D7; aReg A3, A4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //0074ae 4e56 0000 LINK A6,#0 //0074b2 48e7 0318 MOVEM.L D67A34,-(A7) //0074b6 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //0074ba 2e2e 000c MOVE.L 12(A6),D7 D7L = P2; //0074be 266e 0010 MOVE.L 16(A6),A3 A3 = P3; //0074c2 2007 MOVE.L D7,D0 //0074c4 0080 8000 0000 OR.L #-2147483648,D0 //0074ca 2c00 MOVE.L D0,D6 D6L = D7L | 0x80000000; //0074cc 2886 MOVE.L D6,(A4) longGear(A4) = D6L; //0074ce 200c MOVE.L A4,D0 //0074d0 d087 ADD.L D7,D0 //0074d2 2040 MOVE.L D0,A0 //0074d4 2146 fffc MOVE.L D6,-4(A0) longGear(A4+D7L-4) = D6L; //0074d8 2f0b MOVE.L A3,-(A7) //0074da 2f0c MOVE.L A4,-(A7) //0074dc 4eba ff6e JSR $-144 (=0x00744c) //0074e0 508f ADDQ.L #0,A7 TAG00744c(A4, A3); //0074e2 4cdf 18c0 MOVEM.L (A7)+,D67A34 //0074e6 4e5e UNLK A6 //0074e8 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG0074ea(pnt P1, i32 P2, pnt P3) { dReg D6, D7; aReg A0, A3, A4; //;;;;;;;;;;;;;; //0074ea 4e56 0000 LINK A6,#0 //0074ee 48e7 0318 MOVEM.L D67A34,-(A7) //0074f2 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //0074f6 2e2e 000c MOVE.L 12(A6),D7 D7L = P2; //0074fa 266e 0010 MOVE.L 16(A6),A3 A3 = P3; //0074fe 2c2c fffc MOVE.L -4(A4),D6 D6L = longGear(A4-4); //007502 0806 001f BTST 31,D6 //007506 6712 BEQ $+20 (=0x00751a) if (D6L & 0x80000000) { //007508 0886 001f BCLR 31,D6 D6L &= 0x7fffffff; //00750c 99c6 SUB.L D6,A4 A4 -= D6L; //00750e 2f0b MOVE.L A3,-(A7) //007510 2f0c MOVE.L A4,-(A7) //007512 4eba ff02 JSR $-252 (=0x007416) //007516 508f ADDQ.L #0,A7 TAG007416(A4, A3); //007518 de86 ADD.L D6,D7 D7L += D6L; }; //00751a 200c MOVE.L A4,D0 //00751c d087 ADD.L D7,D0 //00751e 2040 MOVE.L D0,A0 A0 = A4 + D7L; //007520 2c10 MOVE.L (A0),D6 D6L = longGear(A0); //007522 0806 001f BTST 31,D6 //007526 6714 BEQ $+22 (=0x00753c) if (D6L & 0x80000000) { //007528 0886 001f BCLR 31,D6 D6L &= 0x7fffffff; //00752c 200c MOVE.L A4,D0 //00752e d087 ADD.L D7,D0 //007530 2f0b MOVE.L A3,-(A7) //007532 2f00 MOVE.L D0,-(A7) //007534 4eba fee0 JSR $-286 (=0x007416) //007538 508f ADDQ.L #0,A7 TAG007416(A4 + D7L, A3); //00753a de86 ADD.L D6,D7 D7L += D6L; }; //00753c 2f0b MOVE.L A3,-(A7) //00753e 2f07 MOVE.L D7,-(A7) //007540 2f0c MOVE.L A4,-(A7) //007542 4eba ff6a JSR $-148 (=0x0074ae) //007546 4fef 000c LEA 12(A7),A7 TAG0074ae(A4, D7L, A3); //00754a 4cdf 18c0 MOVEM.L (A7)+,D67A34 //00754e 4e5e UNLK A6 //007550 4e75 RTS } // ********************************************************* // // ********************************************************* char *TAG007552(i32 P1, char *P2, i16 *P3) { dReg D6, D7; aReg A2, A3, A4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //007552 4e56 0000 LINK A6,#0 //007556 48e7 0338 MOVEM.L D67A234,-(A7) //00755a 2e2e 0008 MOVE.L 8(A6),D7 //00755e 286e 000c MOVE.L 12(A6),A4 D7L = P1; A4 = P2; //007562 08c7 001f BSET 31,D7 D7L |= 0x80000000; //007566 266c 000a MOVE.L 10(A4),A3 A3 = pntGear(A4+10); //00756a 95ca SUB.L A2,A2 A2 = NULL; //00756c 6018 BRA $+26 (=0x007586) while (A3 != NULL) { //00756e 2c13 MOVE.L (A3),D6 D6L = longGear(A3); //007570 bc87 CMP.L D7,D6 //007572 6516 BCS $+24 (=0x00758a) if (D6L < D7L) break; //007574 2006 MOVE.L D6,D0 //007576 9087 SUB.L D7,D0 //007578 0c80 0000 0022 CMP.L #34,D0 //00757e 6202 BHI $+4 (=0x007582) if (D6L - D7L <= 34) A2 = A3; //007580 244b MOVE.L A3,A2 //007582 266b 0008 MOVE.L 8(A3),A3 A3 = pntGear(A3+8); // //007586 200b MOVE.L A3,D0 //007588 66e4 BNE $-26 (=0x00756e) }; //00758a b4fc 0000 CMP.W #0,A2 //00758e 6612 BNE $+20 (=0x0075a2) if (A2 == NULL) { //007590 266c 000a MOVE.L 10(A4),A3 A3 = pntGear(A4+10); //007594 be93 CMP.L (A3),D7 //007596 6212 BHI $+20 (=0x0075aa) if (D7L > longGear(A3)) return A2; //007598 244b MOVE.L A3,A2 A2 = A3; //00759a 206e 0010 MOVE.L 16(A6),A0 //00759e 4250 CLR.W (A0) *P3 = 0; //0075a0 6008 BRA $+10 (=0x0075aa) } else { //0075a2 206e 0010 MOVE.L 16(A6),A0 //0075a6 7001 MOVEQ.L #1,D0 //0075a8 3080 MOVE.W D0,(A0) *P3 = 1; }; //0075aa b4fc 0000 CMP.W #0,A2 //0075ae 200a MOVE.L A2,D0 return A2; //0075b0 4cdf 1cc0 MOVEM.L (A7)+,D67A234 //0075b4 4e5e UNLK A6 //0075b6 4e75 RTS } // ********************************************************* // // ********************************************************* i16 TAG007904(char *,i32) { NotImplemented(0x7904); return 0; } pnt TAG007a1a(i16 P1) { dReg D6, D7; aReg A2, A3, A4; STRUCT6 s6_12; //;;;;;;;;;;;;;;;;;;;;;; //007a1a 4e56 fff4 LINK A6,#-12 //007a1e 48e7 0338 MOVEM.L D67A234,-(A7) //007a22 3e2e 0008 MOVE.W 8(A6),D7 D7W = P1; //007a26 99cc SUB.L A4,A4 A4 = NULL; //007a28 7000 MOVEQ.L #0,D0 //007a2a 3007 MOVE.W D7,D0 //007a2c e580 ASL.L #2,D0 //007a2e 0680 0000 0014 ADD.L #20,D0 //007a34 2c00 MOVE.L D0,D6 D6L = 4 * D7UW + 20; //007a36 266d fe52 MOVE.L -430(A5),A3 A3 = e.Pnt430; //007a3a 3d7c 0400 fff8 MOVE.W #1024,-8(A6) s6_12.word4 = 1024; //007a40 2d46 fff4 MOVE.L D6,-12(A6) s6_12.int0 = D6L; //007a44 486e fff4 PEA -12(A6) //007a48 4eba 0170 JSR $+370 (=0x007bba) //007a4c 588f ADDQ.L #4,A7 //007a4e 2440 MOVE.L D0,A2 A2 = TAG007bba(&s6_12); //007a50 4a80 TST.L D0 //007a52 6700 0062 BEQ $+100 (=0x007ab6) if (A2 != NULL) { //007a56 2f0a MOVE.L A2,-(A7) //007a58 3f3c 0400 MOVE.W #1024,-(A7) //007a5c 2f06 MOVE.L D6,-(A7) //007a5e 4eba 0266 JSR $+616 (=0x007cc6) //007a62 4fef 000a LEA 10(A7),A7 //007a66 2840 MOVE.L D0,A4 A4 = TAG007cc6(D6L, 1024, A2); //007a68 4a80 TST.L D0 //007a6a 674a BEQ $+76 (=0x007ab6) if (A4 != NULL) { //007a6c 197c 00ff 0004 MOVE.B #-1,4(A4) A4[4] = -1; //007a72 197c 0080 0005 MOVE.B #-128,5(A4) A4[5] = -128; //007a78 42ac 0006 CLR.L 6(A4) longGear(A4+6) = 0; //007a7c 3947 000a MOVE.W D7,10(A4) wordGear(A4+10) = D7W; //007a80 426c 000c CLR.W 12(A4) //007a84 426c 000e CLR.W 14(A4) wordGear(A4+12) = 0; wordGear(A4+14) = 0; //007a88 2006 MOVE.L D6,D0 //007a8a 0680 ffff ffec ADD.L #-20,D0 //007a90 2f00 MOVE.L D0,-(A7) //007a92 486c 0010 PEA 16(A4) //007a96 4eba 0c10 JSR $+3090 (=0x0086a8=ClearMemory) //007a9a 508f ADDQ.L #0,A7 ClearMemory(A4+16, D6L-20); //007a9c 200b MOVE.L A3,D0 //007a9e 6606 BNE $+8 (=0x007aa6) if (A3 != NULL) { //007aa0 6010 BRA $+18 (=0x007ab2) while (longGear(A3+6) != 0) { //007aa2 266b 0006 MOVE.L 6(A3),A3 A3 = pntGear(A3+6); //007aa6 4aab 0006 TST.L 6(A3) //007aaa 66f6 BNE $-8 (=0x007aa2) }; //007aac 274c 0006 MOVE.L A4,6(A3) pntGear(A3+6) = A4; //007ab0 6004 BRA $+6 (=0x007ab6) } else { //007ab2 2b4c fe52 MOVE.L A4,-430(A5) e.Pnt430 = A4; }; }; }; //007ab6 200c MOVE.L A4,D0 return A4; //007ab8 4cdf 1cc0 MOVEM.L (A7)+,D67A234 //007abc 4e5e UNLK A6 //007abe 4e75 RTS } // ********************************************************* // // ********************************************************* char * TAG007ac0(pnt *P1) { dReg D0, D5, D6, D7; aReg A2, A3; pnt *pA4; A3 = (pnt)0xbaddade; //debugging //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //007ac0 4e56 0000 LINK A6,#0 //007ac4 48e7 0738 MOVEM.L D567A234,-(A7) //007ac8 286e 0008 MOVE.L 8(A6),A4 pA4 = P1; //007acc 7a00 MOVEQ.L #0,D5 D5L = 0; //007ace 246d fe52 MOVE.L -430(A5),A2 //007ad2 6000 005e BRA $+96 (=0x007b32) for (A2 = e.Pnt430; A2 != NULL; A2=pntGear(A2+6)) { //007ad6 302a 000c MOVE.W 12(A2),D0 //007ada b06a 000a CMP.W 10(A2),D0 //007ade 6400 004e BCC $+80 (=0x007b2e) if (wordGear(A2+12) >= wordGear(A2+10)) continue; //007ae2 3c2a 000e MOVE.W 14(A2),D6 D6W = wordGear(A2+14); //007ae6 3006 MOVE.W D6,D0 //007ae8 e540 ASL.W #2,D0 //007aea 4840 SWAP D0 //007aec 4240 CLR.W D0 //007aee 4840 SWAP D0 D0L = (D6UW << 2) & 0xffff; //007af0 d08a ADD.L A2,D0 //007af2 0680 0000 0010 ADD.L #16,D0 //007af8 2640 MOVE.L D0,A3 A3 = A2 + D0L + 16; //007afa 3e2a 000a MOVE.W 10(A2),D7 //007afe 6022 BRA $+36 (=0x007b22) for (D7W = wordGear(A2+10); (D7W--)!=0; ) { //007b00 bc6a 000a CMP.W 10(A2),D6 //007b04 6608 BNE $+10 (=0x007b0e) if (wordGear(A2+10) == D6W) { //007b06 7c00 MOVEQ.L #0,D6 D6L = 0; //007b08 41ea 0010 LEA 16(A2),A0 //007b0c 2648 MOVE.L A0,A3 A3 = A2 + 16; }; //007b0e 4a93 TST.L (A3) //007b10 660c BNE $+14 (=0x007b1e) if (pntGear(A3) == NULL) { //007b12 3546 000e MOVE.W D6,14(A2) wordGear(A2+14) = D6W; //007b16 526a 000c ADDQ.W #1,12(A2) wordGear(A2+12)++; //007b1a 7a01 MOVEQ.L #1,D5 D5W = 1; //007b1c 600c BRA $+14 (=0x007b2a) break; }; //007b1e 5246 ADDQ.W #1,D6 D6W++; //007b20 588b ADDQ.L #4,A3 A3 += 4; // //007b22 3007 MOVE.W D7,D0 //007b24 5347 SUBQ.W #1,D7 //007b26 4a40 TST.W D0 //007b28 66d6 BNE $-40 (=0x007b00) }; //007b2a 4a45 TST.W D5 //007b2c 6608 BNE $+10 (=0x007b36) if (D5W) break; // //007b2e 246a 0006 MOVE.L 6(A2),A2 // //007b32 200a MOVE.L A2,D0 //007b34 66a0 BNE $-94 (=0x007ad6) }; //007b36 4a45 TST.W D5 //007b38 661c BNE $+30 (=0x007b56) if (D5W == 0) { //007b3a 3f2d fe56 MOVE.W -426(A5),-(A7) //007b3e 4eba feda JSR $-292 (=0x007a1a) //007b42 548f ADDQ.L #2,A7 //007b44 2440 MOVE.L D0,A2 A2 = TAG007a1a(e.Word426); //007b46 4a80 TST.L D0 //007b48 670c BEQ $+14 (=0x007b56) if (A2 != NULL) { //007b4a 41ea 0010 LEA 16(A2),A0 //007b4e 2648 MOVE.L A0,A3 A3 = A2 + 16; //007b50 526a 000c ADDQ.W #1,12(A2) wordGear(A2+12)++; //007b54 7a01 MOVEQ.L #1,D5 D5W = 1; }; }; //007b56 4a45 TST.W D5 //007b58 6602 BNE $+4 (=0x007b5c) //007b5a 97cb SUB.L A3,A3 if (D5W == 0) A3 = NULL; //007b5c 288a MOVE.L A2,(A4) *pA4 = A2; //007b5e 200b MOVE.L A3,D0 ASSERT(A3 != (pnt)0xbaddade); return A3; //007b60 4cdf 1ce0 MOVEM.L (A7)+,D567A234 //007b64 4e5e UNLK A6 //007b66 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG007b68(pnt P1) { dReg D0; aReg A0, A3, A4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //007b68 4e56 0000 LINK A6,#0 //007b6c 48e7 0118 MOVEM.L D7A34,-(A7) //007b70 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //007b74 266d fe52 MOVE.L -430(A5),A3 //007b78 6034 BRA $+54 (=0x007bae) for (A3=e.Pnt430; A3!=NULL; A3=pntGear(A3+6)) { //007b7a b7cc CMP.L A4,A3 //007b7c 622c BHI $+46 (=0x007baa) if (A3 > A4) continue; //007b7e 7000 MOVEQ.L #0,D0 //007b80 302b 000a MOVE.W 10(A3),D0 //007b84 e580 ASL.L #2,D0 D0L = 4 * (UI16)(wordGear(A3+10)); //007b86 d08b ADD.L A3,D0 //007b88 0680 0000 0014 ADD.L #20,D0 A0 = A3 + D0L + 20; //007b8e b9c0 CMP.L D0,A4 //007b90 6418 BCC $+26 (=0x007baa) if (A4 >= A0) continue; //007b92 4294 CLR.L (A4) longGear(A4) = 0; //007b94 536b 000c SUBQ.W #1,12(A3) wordGear(A3+12)--; //007b98 200c MOVE.L A4,D0 //007b9a 908b SUB.L A3,D0 D0L = A4 - A3; //007b9c 0680 ffff fff0 ADD.L #-16,D0 D0L -= 16; //007ba2 e488 LSR.L #2,D0 D0L /= 4; //007ba4 3740 000e MOVE.W D0,14(A3) wordGear(A3+14) = D0W; //007ba8 6008 BRA $+10 (=0x007bb2) break; // //007baa 266b 0006 MOVE.L 6(A3),A3 // //007bae 200b MOVE.L A3,D0 //007bb0 66c8 BNE $-54 (=0x007b7a) }; //007bb2 4cdf 1880 MOVEM.L (A7)+,D7A34 //007bb6 4e5e UNLK A6 //007bb8 4e75 RTS } // ********************************************************* // // ********************************************************* char *TAG007bba(STRUCT6 *P1) { dReg D0, D1, D3, D4, D5, D6, D7; aReg A2, A3; STRUCT6 *s6A4; //;;;;;;;;;;;;;;;; //007bba 4e56 0000 LINK A6,#0 //007bbe 48e7 1f38 MOVEM.L D34567A234,-(A7) //007bc2 286e 0008 MOVE.L 8(A6),A4 s6A4 = P1; //007bc6 082c 0000 0005 BTST 0,5(A4) //007bcc 670a BEQ $+12 (=0x007bd8) if (s6A4->word4 & 0x01) { //007bce 7e01 MOVEQ.L #1,D7 //007bd0 41ed fe5a LEA -422(A5),A0 //007bd4 2648 MOVE.L A0,A3 D7L = 1; A3 = (pnt)&e.pDBank422; //007bd6 6014 BRA $+22 (=0x007bec) } else { //007bd8 7eff MOVEQ.L #-1,D7 nmqe D7L = -1; //007bda 302d fe58 MOVE.W -424(A5),D0 //007bde 5340 SUBQ.W #1,D0 //007be0 c0fc 0012 MULU #18,D0 //007be4 41ed fe5a LEA -422(A5),A0 //007be8 d1c0 ADD.L D0,A0 //007bea 2648 MOVE.L A0,A3 A3 = (pnt)&e.pDBank422 + 18*(e.Word424-1); }; //007bec 2a14 MOVE.L (A4),D5 D5L = s6A4->int0; //007bee 244b MOVE.L A3,A2 A2 = A3; for (;;) { //007bf0 7800 MOVEQ.L #0,D4 //007bf2 7600 MOVEQ.L #0,D3 //007bf4 7c00 MOVEQ.L #0,D6 D4L = 0; D3L = 0; //007bf6 6034 BRA $+54 (=0x007c2c) for (D6L=0; D6Wword4); //007c00 323c 07f8 MOVE.W #2040,D1 //007c04 c26c 0004 AND.W 4(A4),D1 D1W = (UI16)(s6A4->word4 & 0x7f8); //007c08 b041 CMP.W D1,D0 //007c0a 6616 BNE $+24 (=0x007c22) if (D0W != D1W) continue; //007c0c 7801 MOVEQ.L #1,D4 D4L = 1; //007c0e 206b 000a MOVE.L 10(A3),A0 //007c12 203c 7fff ffff MOVE.L #2147483647,D0 //007c18 c090 AND.L (A0),D0 D0L = longGear(pntGear(A3+10)) & 0x7fffffff; //007c1a b085 CMP.L D5,D0 //007c1c 6504 BCS $+6 (=0x007c22) if (D0L >= D5L) { //007c1e 7601 MOVEQ.L #1,D3 D3L = 1; //007c20 6010 BRA $+18 (=0x007c32) break; }; // //007c22 5246 ADDQ.W #1,D6 //007c24 3007 MOVE.W D7,D0 //007c26 c1fc 0012 MULS #18,D0 //007c2a d7c0 ADD.L D0,A3 //007c2c bc6d fe58 CMP.W -424(A5),D6 //007c30 65c6 BCS $-56 (=0x007bf8) }; /// for (D6W) //007c32 4a44 TST.W D4 //007c34 661a BNE $+28 (=0x007c50) if (D4W == 0) { //007c36 7000 MOVEQ.L #0,D0 //007c38 302c 0004 MOVE.W 4(A4),D0 //007c3c 2f00 MOVE.L D0,-(A7) //007c3e 4879 010d 0005 PEA 17629189 //007c44 3f3c 0001 MOVE.W #1,-(A7) //007c48 4eba 0b3e JSR $+2880 (=0x008788) //007c4c 4fef 000a LEA 10(A7),A7 TAG008788(1, 0x010d0005, s6A4->word4 & 0xffff); }; //007c50 4a43 TST.W D3 //007c52 6600 0068 BNE $+106 (=0x007cbc) if (D3W == 0) { //007c56 264a MOVE.L A2,A3 A3 = A2; //007c58 7c00 MOVEQ.L #0,D6 //007c5a 602c BRA $+46 (=0x007c88) for (D6L=0; D6Wword4); //007c64 323c 07f8 MOVE.W #2040,D1 //007c68 c26c 0004 AND.W 4(A4),D1 D1W = (UI16)(s6A4->word4 & 0x07f8); //007c6c b041 CMP.W D1,D0 //007c6e 660e BNE $+16 (=0x007c7e) if (D0W != D1W) continue; //007c70 2f05 MOVE.L D5,-(A7) //007c72 2f0b MOVE.L A3,-(A7) //007c74 4eba fc8e JSR $-880 (=0x007904) //007c78 508f ADDQ.L #0,A7 //007c7a 4a40 TST.W D0 //007c7c 6610 BNE $+18 (=0x007c8e) if (TAG007904(A3, D5L) == 0) break; // //007c7e 5246 ADDQ.W #1,D6 //007c80 3007 MOVE.W D7,D0 //007c82 c1fc 0012 MULS #18,D0 //007c86 d7c0 ADD.L D0,A3 // //007c88 bc6d fe58 CMP.W -424(A5),D6 //007c8c 65ce BCS $-48 (=0x007c5c) }; //007c8e bc6d fe58 CMP.W -424(A5),D6 //007c92 6628 BNE $+42 (=0x007cbc) if (e.Word424 == 0) { //007c94 7000 MOVEQ.L #0,D0 //007c96 302c 0004 MOVE.W 4(A4),D0 //007c9a 2f00 MOVE.L D0,-(A7) //007c9c 4879 010d 0001 PEA 17629185 //007ca2 4267 CLR.W -(A7) //007ca4 4eba 0ae2 JSR $+2788 (=0x008788) //007ca8 4fef 000a LEA 10(A7),A7 D0L = TAG008788(0, 0x010d0001, s6A4->word4 & 0xffff); //007cac 0c80 0102 fffe CMP.L #16973822,D0 //007cb2 6606 BNE $+8 (=0x007cba) if (D0L != 0x010d0001) { //007cb4 264a MOVE.L A2,A3 A3 = A2; //007cb6 6000 ff38 BRA $-198 (=0x007bf0) continue; }; }; //007cba 97cb SUB.L A3,A3 }; //007cbc 200b MOVE.L A3,D0 return A3; } ; //007cbe 4cdf 1cf8 MOVEM.L (A7)+,D34567A234 //007cc2 4e5e UNLK A6 //007cc4 4e75 RTS } // ********************************************************* // // ********************************************************* char *TAG007cc6(i32 P1, i16 P2, char *P3) { dReg D5, D6, D7; aReg A0, A2, A3, A4; i16 w_2; //;;;;;;;;;;;;;;;;;;;;; //007cc6 4e56 fffe LINK A6,#-2 //007cca 48e7 0738 MOVEM.L D567A234,-(A7) //007cce 2e2e 0008 MOVE.L 8(A6),D7 D7L = P1; //007cd2 3c2e 000c MOVE.W 12(A6),D6 D6W = P2; //007cd6 286e 000e MOVE.L 14(A6),A4 A4 = P3; //007cda 486e fffe PEA -2(A6) //007cde 2f0c MOVE.L A4,-(A7) //007ce0 2f07 MOVE.L D7,-(A7) //007ce2 4eba f86e JSR $-1936 (=0x007552) //007ce6 4fef 000c LEA 12(A7),A7 //007cea 2640 MOVE.L D0,A3 A3 = TAG007552(D7L, A4, &w_2); //007cec 4a80 TST.L D0 //007cee 6700 0052 BEQ $+84 (=0x007d42) if (A3 != NULL) { //007cf2 2f0c MOVE.L A4,-(A7) //007cf4 2f0b MOVE.L A3,-(A7) //007cf6 4eba f71e JSR $-2272 (=0x007416) //007cfa 508f ADDQ.L #0,A7 TAG007416(A3, A4); //007cfc 203c 7fff ffff MOVE.L #2147483647,D0 //007d02 c093 AND.L (A3),D0 //007d04 2a00 MOVE.L D0,D5 D5L = longGear(A3) & 0x7fffffff; //007d06 4a6e fffe TST.W -2(A6) //007d0a 6704 BEQ $+6 (=0x007d10) if (w_2 != 0) { //007d0c 2e05 MOVE.L D5,D7 //007d0e 6022 BRA $+36 (=0x007d32) D7L = D5L; } else { //007d10 9a87 SUB.L D7,D5 D5L -= D7L; //007d12 0806 0000 BTST 0,D6 //007d16 6708 BEQ $+10 (=0x007d20) if (D6L & 1) { //007d18 200b MOVE.L A3,D0 //007d1a d087 ADD.L D7,D0 //007d1c 2440 MOVE.L D0,A2 A2 = A3 + D7L; //007d1e 6004 BRA $+6 (=0x007d24) } else { //007d20 244b MOVE.L A3,A2 //007d22 d7c5 ADD.L D5,A3 A2 = A3; A3 += D5L; }; //007d24 2f0c MOVE.L A4,-(A7) //007d26 2f05 MOVE.L D5,-(A7) //007d28 2f0a MOVE.L A2,-(A7) //007d2a 4eba f782 JSR $-2172 (=0x0074ae) //007d2e 4fef 000c LEA 12(A7),A7 TAG0074ae(A2, D5L, A4); }; //007d32 9fac 000e SUB.L D7,14(A4) longGear(A4+14) -= D7L; //007d36 2687 MOVE.L D7,(A3) longGear(A3) = D7L; //007d38 200b MOVE.L A3,D0 //007d3a d087 ADD.L D7,D0 //007d3c 2040 MOVE.L D0,A0 A0 = A3 + D7L; //007d3e 2147 fffc MOVE.L D7,-4(A0) longGear(A0-4) = D7L; }; //007d42 200b MOVE.L A3,D0 return A3; //007d44 4cdf 1ce0 MOVEM.L (A7)+,D567A234 //007d48 4e5e UNLK A6 //007d4a 4e75 RTS } // ********************************************************* // // ********************************************************* pnt TAG007d4c(STRUCT12 *P1) { dReg D0, D7; aReg A0, A2, A3; STRUCT12 *s12A4; pnt pnt_8; pnt pnt_4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //007d4c 4e56 fff8 LINK A6,#-8 //007d50 48e7 0138 MOVEM.L D7A234,-(A7) //007d54 286e 0008 MOVE.L 8(A6),A4 s12A4 = P1; //007d58 7000 MOVEQ.L #0,D0 //007d5a 302c 0006 MOVE.W 6(A4),D0 D0L = s12A4->word6 & 0xffff; //007d5e d094 ADD.L (A4),D0 //007d60 0680 0000 0012 ADD.L #18,D0 D7L = D0L + s12A4->long0 + 18; //007d66 2e00 MOVE.L D0,D7 //007d68 0807 0000 BTST 0,D7 //007d6c 6702 BEQ $+4 (=0x007d70) if (D7L & 1) D7L++; //007d6e 5287 ADDQ.L #1,D7 //007d70 2887 MOVE.L D7,(A4) s12A4->long0 = D7L; //007d72 486e fff8 PEA -8(A6) //007d76 4eba fd48 JSR $-694 (=0x007ac0) //007d7a 588f ADDQ.L #4,A7 //007d7c 2440 MOVE.L D0,A2 A2 = TAG007ac0(&pnt_8); //007d7e 4a80 TST.L D0 //007d80 6700 0088 BEQ $+138 (=0x007e0a) if (A2 == NULL) return NULL; //007d84 2f0c MOVE.L A4,-(A7) //007d86 4eba fe32 JSR $-460 (=0x007bba) //007d8a 588f ADDQ.L #4,A7 //007d8c 2d40 fffc MOVE.L D0,-4(A6) pnt_4 = TAG007bba((STRUCT6 *)s12A4); //007d90 4a80 TST.L D0 //007d92 6700 006e BEQ $+112 (=0x007e02) //007d96 2f2e fffc MOVE.L -4(A6),-(A7) //007d9a 3f2c 0004 MOVE.W 4(A4),-(A7) //007d9e 2f07 MOVE.L D7,-(A7) //007da0 4eba ff24 JSR $-218 (=0x007cc6) //007da4 4fef 000a LEA 10(A7),A7 //007da8 2640 MOVE.L D0,A3 //007daa 4a80 TST.L D0 //007dac 6754 BEQ $+86 (=0x007e02) if ( (pnt_4 != NULL) && ((A3 = TAG007cc6(D7L, s12A4->word4, pnt_4))!=NULL) ) { //007dae 7000 MOVEQ.L #0,D0 //007db0 302c 0006 MOVE.W 6(A4),D0 //007db4 d08b ADD.L A3,D0 //007db6 0680 0000 000e ADD.L #14,D0 //007dbc 2480 MOVE.L D0,(A2) pntGear(A2) = A3 + (s12A4->word6&0xffff) + 14; //007dbe 422b 0004 CLR.B 4(A3) A3[4] = 0; //007dc2 7007 MOVEQ.L #7,D0 //007dc4 c06c 0004 AND.W 4(A4),D0 //007dc8 1740 0005 MOVE.B D0,5(A3) A3[5] = (UI8)(s12A4->word4 & 7); //007dcc 376c 0004 000a MOVE.W 4(A4),10(A3) wordGear(A3+10) = s12A4->word4; //007dd2 274a 0006 MOVE.L A2,6(A3) pntGear(A3+6) = A2; //007dd6 47eb 000c LEA 12(A3),A3 A3 += 12; //007dda 4aac 0008 TST.L 8(A4) //007dde 6710 BEQ $+18 (=0x007df0) //007de0 4a6c 0006 TST.W 6(A4) //007de4 670a BEQ $+12 (=0x007df0) if ( (s12A4->fnc8 != NULL) && (s12A4->word6 != 0) ) { //007de6 2f0b MOVE.L A3,-(A7) //007de8 206c 0008 MOVE.L 8(A4),A0 //007dec 4e90 JSR (A0) //007dee 588f ADDQ.L #4,A7 (*s12A4->fnc8)(A3); }; //007df0 7000 MOVEQ.L #0,D0 //007df2 302c 0006 MOVE.W 6(A4),D0 //007df6 d08b ADD.L A3,D0 //007df8 2040 MOVE.L D0,A0 A0 = A3 + (s12A4->word6 & 0xffff); //007dfa 30ac 0006 MOVE.W 6(A4),(A0) wordGear(A0) = s12A4->word6; //007dfe 200a MOVE.L A2,D0 //007e00 600c BRA $+14 (=0x007e0e) return A2; } else { //007e02 206e fff8 MOVE.L -8(A6),A0 //007e06 5368 000c SUBQ.W #1,12(A0) wordGear(pnt_8+12)--; //007e0a 95ca SUB.L A2,A2 //007e0c 60f0 BRA $-14 (=0x007dfe) return NULL; }; //007e0e 4cdf 1c80 MOVEM.L (A7)+,D7A234 //007e12 4e5e UNLK A6 //007e14 4e75 RTS } // ********************************************************* // // ********************************************************* void TAG007e16(pnt P1, pnt P2) { dReg D7; aReg A3, A4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //007e16 4e56 0000 LINK A6,#0 //007e1a 48e7 0118 MOVEM.L D7A34,-(A7) //007e1e 286e 0008 MOVE.L 8(A6),A4 A4 = P1; //007e22 266e 000c MOVE.L 12(A6),A3 A3 = P2; //007e26 2e14 MOVE.L (A4),D7 D7L = longGear(A4); //007e28 dfab 000e ADD.L D7,14(A3) longGear(A3+14) += D7L; //007e2c 2f0b MOVE.L A3,-(A7) //007e2e 2f07 MOVE.L D7,-(A7) //007e30 2f0c MOVE.L A4,-(A7) //007e32 4eba f6b6 JSR $-2376 (=0x0074ea) //007e36 4fef 000c LEA 12(A7),A7 TAG0074ea(A4, D7L, A3); //007e3a 4cdf 1880 MOVEM.L (A7)+,D7A34 //007e3e 4e5e UNLK A6 //007e40 4e75 RTS } // ********************************************************* // // ********************************************************* i32 TAG007e42(i16 P1, i16 P2) { dReg D5, D7; aReg A0, A3, A4; //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; //007e42 4e56 fffc LINK A6,#-4 //007e46 48e7 0718 MOVEM.L D567A34,-(A7) //007e4a 4878 ffff PEA 65535 //007e4e 3f3c 0048 MOVE.W #72,-(A7) //007e52 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //007e56 5c8f ADDQ.L #6,A7 //007e58 2e00 MOVE.L D0,D7 //D7L = MALLOC(-1); D7L = 240000; //007e5a 0c80 0001 d4c0 CMP.L #120000,D0 //007e60 6416 BCC $+24 (=0x007e78) if (D7L < 120000) { NotImplemented(0x7e62); //007e62 486d fe7e PEA -386(A5) //007e66 4879 010d 000b PEA 17629195 //007e6c 3f3c 0001 MOVE.W #1,-(A7) //007e70 4eba 0916 JSR $+2328 (=0x008788) //007e74 4fef 000a LEA 10(A7),A7 }; //007e78 70fe MOVEQ.L #-2,D0 nmqe //007e7a c087 AND.L D7,D0 //007e7c 0680 ffff f060 ADD.L #-4000,D0 //007e82 2e00 MOVE.L D0,D7 D7L = (D7L & -2) - 4000; //007e84 2f07 MOVE.L D7,-(A7) //007e86 3f3c 0048 MOVE.W #72,-(A7) //007e8a 4ead 009a JSR 154(A5) (=0x005c66=Trap #1) //007e8e 5c8f ADDQ.L #6,A7 //007e90 2840 MOVE.L D0,A4 A4 = MALLOC(D7L); //007e92 4a80 TST.L D0 //007e94 6616 BNE $+24 (=0x007eac) if (A4==NULL) { NotImplemented(0x7e96); //007e96 486d fe9a PEA -358(A5) //007e9a 4879 010d 000b PEA 17629195 //007ea0 3f3c 0001 MOVE.W #1,-(A7) //007ea4 4eba 08e2 JSR $+2276 (=0x008788) //007ea8 4fef 000a LEA 10(A7),A7 }; //007eac 2b4c fe4e MOVE.L A4,-434(A5) e.pAllocDBank434 = A4; //007eb0 200c MOVE.L A4,D0 //007eb2 0800 0000 BTST 0,D0 //007eb6 6704 BEQ $+6 (=0x007ebc) //007eb8 528c ADDQ.L #1,A4 //007eba 5387 SUBQ.L #1,D7 //007ebc 0247 fffe AND.W #65534,D7 D7L &= -2; //007ec0 7001 MOVEQ.L #1,D0 //007ec2 3b40 fe58 MOVE.W D0,-424(A5) e.Word424 = 1; //007ec6 2b4c fe5a MOVE.L A4,-422(A5) e.pDBank422 = A4; //007eca 2b47 fe60 MOVE.L D7,-416(A5) e.DBankLen416 = D7L; //007ece 3b7c 07f8 fe5e MOVE.W #2040,-418(A5) e.Word418 = 2040; //007ed4 7a00 MOVEQ.L #0,D5 //007ed6 41ed fe5a LEA -422(A5),A0 //007eda 2648 MOVE.L A0,A3 //007edc 6038 BRA $+58 (=0x007f16) for (D5L=0, A3=(pnt)&e.pDBank422; D5W'Z'))) // bad key pressed return; if(e.EditBoxPosition == len) // appending to the end name[len++] = key; else { // insert in the middle i32 i; for(i=max_len;i>=e.EditBoxPosition;i--) name[i+1] = name[i]; name[e.EditBoxPosition] = key; } position = e.EditBoxPosition + 1; } if(e.EditBoxSelected == 0) FillCharacterNameEditBox(name, 13, 7); else FillCharacterNameEditBox(name, 14, 19); DrawNameTitleCarret(e.EditBoxSelected, (i16)position); }