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)