Subj : Re: Looking moremore optimizations! To : All From : Harry Potter Date : Sat Oct 27 2018 05:21 am Let me try again: ------------------------- void vLook (void)//char Itm1) { static void (*func)(); if (Itm1!=0xFF) { if (SearchInvPlayer () || SearchInvRoom ()) { if ((s=hidereadw((void*)&Item[Itm1].Info))==0) { printscr ("No help available for that item."); return; } printh (s); //printh ((void*)&Item[Itm1].Info); //else // ; //return; //} } else { //puts (Message[msgItemNotAvail]); printmsg(msgItemNotAvail); } return; } CurRoomInv=Player.RoomInv[CRoom]; CRm=(void*)&Room[CRoom]; printh ((char*)hidereadw((void*)&CRm->Desc)); func=hidereadw((void*)&CRm->RoomHandler); (*func) (); printcr(); for (i=0; i<8 && (c=CurRoomInv[i])!=0xFF;++i) { prints ("There is a "); printh (hidereadw((void*)&Item[/*CurRoomInv[i]*/c].Name)); printscr (" here."); } if (i) printcr(); } void vLook2 (void) { Itm1=-1; vLook (); } void vGo ()//char Itm1) { if (Itm1>=160 && Itm1<164) { j = Itm1&0x0F; //goto godir; if ((i=CRm->NextRoom[j])==0xFF) { printmsg(msgCantGoThere); return; } CRoom = i; goto exitgood; } switch (Itm1) { case iTeleporter: if (!SearchInvRoom()) { printscr ("There's no teleporter here."); return; } Player.ExitRoom = CRoom; CRoom = rTeleporter; goto exitgood; } printmsg(msgCantGoThere); return; godir: exitgood: Player.ExitRoom =-1; vLook2(); } ------------------------------------ void main (void) { //static unsigned char c; //static char Input [38]; //static unsigned char Vrb;//, Itm, ItmNum, CurPos; //static unsigned char CurPos;//IncPos; //static unsigned char i; static void (* vfunc) (); //printf ("%X\n", &Item[0].Name); //cgetc(); //bordercolor(8); bgcolor (1); //textcolor (4); brdrcol=8; backcol=1; //textcol=4; /*123456789012345678901234567890123456789*/ //clrscr (); printscr("\f\n\x9cWelcome to \"Adventures on Planet Smir\n" "III, Episode 1, v .10\" for the Commo-\n" "dore 64 and emulators, created with cc65" "by Joseph Rose.\n\n" "Type INTRO during the game for\n" "instructions.\n\n" "Do you want to load a saved game?"); switch (getkey ()) { case 'd': ++c; case 'y': ++c; } InitPlayer (); if (c==2) { printscr ("Debug mode: Enter room #"); GetInput (Input, 4); for (CurPos=0;Input[CurPos]; ++CurPos) { CRoom=(((CRoom<<2)+CRoom)<<1)+(Input[CurPos]&0xF); } } vLook2 (); while (1) { DispScoreBoard(); if (!GetInput (Input,38)) continue; Vrb = FindVerb (/*Input*/); if (Vrb == 0xFF) { prints ("I don't know how to "); prints (Input); printperiod (); continue; } while (Input[CurPos]==32) ++CurPos; if (Input[CurPos]) //Itm1=-1; goto runverb;} { if ((Itm1 = FindItem (&Input[CurPos]))==0xFF ) { prints ("I don't know what a "); prints (&Input[CurPos]); printscr (" is."); continue; } } else Itm1=0xFF; vfunc=hidereadw((void*)&Verb[Vrb].vdo); (*vfunc) (); } } ----------------------- Does this help? :) BTW, if necesssary, I can supply some of the variables' purposes. --- SoupGate-Win32 v1.05 * Origin: Agency HUB, Dunedin - New Zealand | Fido<>Usenet Gateway (3:770/3) .