Logo Search packages:      
Sourcecode: scummvm version File versions

help.cpp

/* ScummVM - Scumm Interpreter
 * Copyright (C) 2002-2004 The ScummVM project
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * $Header: /cvsroot/scummvm/scummvm/scumm/help.cpp,v 1.17 2004/01/06 12:45:30 fingolfin Exp $
 *
 */

#include "stdafx.h"
#include "scumm/help.h"
#include "scumm/scumm.h"
#include "common/str.h"

namespace Scumm {

int ScummHelp::numPages(byte gameId) {
      switch (gameId) {
      case GID_MANIAC:
      case GID_ZAK:
      case GID_ZAK256:
            return 4;
            break;
      case GID_INDY3:
            return 6;
            break;
      case GID_LOOM:
      case GID_LOOM256:
      case GID_MONKEY_EGA:
      case GID_MONKEY_VGA:
      case GID_MONKEY_SEGA:
      case GID_MONKEY:
      case GID_MONKEY2:
      case GID_INDY4:
      case GID_TENTACLE:
      case GID_SAMNMAX:
      case GID_DIG:
      case GID_FT:
      case GID_CMI:
            return 3;
            break;  
/*    TODO - I don't know the controls for these games
      case GID_PUTTDEMO:
      case GID_PUTTPUTT:
*/    
      default:
            return 2;
      }
}

#define ADD_BIND(k,d) do { key[i] = k; dsc[i] = d; i++; } while(0)
#define ADD_TEXT(d) ADD_BIND("",d)
#define ADD_LINE ADD_BIND("","")

void ScummHelp::updateStrings(byte gameId, byte version, int page,
                        String &title, String *&key, String *&dsc) {
      key = new String[HELP_NUM_LINES];
      dsc = new String[HELP_NUM_LINES];
      int i = 0;
      switch (page) {
      case 1:
            title = "Common keyboard commands:";
            ADD_BIND("F5", "Save / Load dialog");
            if (version >= 5)
                  ADD_BIND(".", "Skip line of text");
            ADD_BIND("Esc", "Skip cutscene");
            ADD_BIND("Space", "Pause game");
            ADD_BIND("Ctrl 0-9", "Load game state 1-10");
            ADD_BIND("Alt 0-9", "Save game state 1-10");
#ifdef MACOSX
            ADD_BIND("Cmd q", "Quit");
#else
            ADD_BIND("Alt x, Ctrl z", "Quit");
#endif
            ADD_BIND("Alt Enter", "Toggle fullscreen");
            ADD_BIND("[, ]", "Music volume up / down");
            ADD_BIND("-, +", "Text speed slower / faster");
            ADD_BIND("Enter", "Simulate left mouse button");
            ADD_BIND("Tab", "Simulate right mouse button");
            ADD_BIND("Arrow Keys", "Simulate mouse movement");
            break;
      case 2:
            title = "Special keyboard commands:";
            ADD_BIND("~, #", "Show / Hide console");
            ADD_BIND("Ctrl d", "Start the debugger");
            ADD_BIND("Ctrl s", "Show memory consumption");
            ADD_BIND("Ctrl f", "Run in fast mode (*)");
            ADD_BIND("Ctrl g", "Run in really fast mode (*)");
            ADD_BIND("Ctrl m", "Toggle mouse capture");
            ADD_BIND("Ctrl Alt 1-8", "Switch between graphics filters");
            ADD_BIND("Ctrl Alt +, -", "Increase / Decrease scale factor");
            ADD_BIND("Ctrl Alt a", "Toggle aspect-ratio correction");
            ADD_LINE;
            ADD_LINE;
            ADD_TEXT("* Note that using ctrl-f and");
            ADD_TEXT("   ctrl-g are not recommended");
            ADD_TEXT("   since they may cause crashes");
            ADD_TEXT("   or incorrect game behaviour.");
            break;
      case 3:
            if (gameId == GID_LOOM || gameId == GID_LOOM256)
                  title = "Spinning drafts on the keyboard:";
            else
                  title = "Main game controls:";
            switch (gameId) {
            case GID_ZAK:
            case GID_ZAK256:
            case GID_MANIAC:
                  ADD_BIND("q", "Push");
                  ADD_BIND("a", "Pull");
                  ADD_BIND("z", "Give");
                  ADD_BIND("w", "Open");
                  ADD_BIND("s", "Close");
                  ADD_BIND("x", "Read");
                  ADD_BIND("e", "Walk to");
                  ADD_BIND("d", "Pick up");
                  ADD_BIND("c", "What is");
                  if (gameId == GID_MANIAC) {
                        ADD_BIND("r", "Unlock");
                        ADD_BIND("f", "New kid");
                  } else {
                        ADD_BIND("r", "Put on");
                        ADD_BIND("f", "Take off");
                  }
                  ADD_BIND("v", "Use");
                  ADD_BIND("t", "Turn on");
                  ADD_BIND("g", "Turn off");
                  if (gameId == GID_MANIAC)
                        ADD_BIND("b", "Fix");
                  else
                        ADD_BIND("b", "Switch");
                  break;
            case GID_INDY3:
                  ADD_BIND("q", "Push");
                  ADD_BIND("a", "Pull");
                  ADD_BIND("z", "Give");
                  ADD_BIND("w", "Open");
                  ADD_BIND("s", "Close");
                  ADD_BIND("x", "Look");
                  ADD_BIND("e", "Walk to");
                  ADD_BIND("d", "Pick up");
                  ADD_BIND("c", "What is");
                  ADD_BIND("r", "Use");
                  ADD_BIND("f", "Turn on");
                  ADD_BIND("v", "Turn off");
                  ADD_BIND("t", "Talk");
                  ADD_BIND("g", "Travel");
                  ADD_BIND("b", "To Henry / To Indy");
                  break;
            case GID_LOOM:
            case GID_LOOM256:
                  ADD_BIND("q, c", "play C minor on distaff");
                  ADD_BIND("w, d", "play D on distaff");
                  ADD_BIND("e, e", "play E on distaff");
                  ADD_BIND("r, f", "play F on distaff");
                  ADD_BIND("t, g", "play G on distaff");
                  ADD_BIND("y, a", "play A on distaff");
                  ADD_BIND("u, b", "play B on distaff");
                  ADD_BIND("i, C", "play C major on distaff");
                  break;
            case GID_MONKEY_EGA:
            case GID_MONKEY_VGA:
                  ADD_BIND("o", "Open");
                  ADD_BIND("c", "Close");
                  ADD_BIND("s", "puSh");
                  ADD_BIND("y", "pull (Yank)");
                  ADD_BIND("w", "Walk to");
                  ADD_BIND("p", "Pick up");
                  ADD_BIND("t", "Talk to");
                  ADD_BIND("g", "Give");
                  ADD_BIND("u", "Use");
                  ADD_BIND("l", "Look at");
                  ADD_BIND("n", "turn oN");
                  ADD_BIND("f", "turn oFf");
                  break;
            case GID_MONKEY:
            case GID_MONKEY_SEGA:
            case GID_MONKEY2:
            case GID_INDY4:
            case GID_TENTACLE:
                  ADD_BIND("g", "Give");
                  ADD_BIND("o", "Open");
                  ADD_BIND("c", "Close");
                  ADD_BIND("p", "Pick up");
                  ADD_BIND("l", "Look at");
                  ADD_BIND("t", "Talk to");
                  ADD_BIND("u", "Use");
                  ADD_BIND("s", "puSh");
                  ADD_BIND("y", "pull (Yank)");
                  if (gameId == GID_MONKEY_SEGA) {
                  // FIXME look at scripts to figure all options out...
                  // keys 1->4 seem to do something as well
                        ADD_BIND("6", "Highlight prev dialogue");
                        ADD_BIND("7", "Highlight next dialogue");
                  }
                  break;
            case GID_SAMNMAX:
                  ADD_BIND("w", "Walk");
                  ADD_BIND("t", "Talk");
                  ADD_BIND("u", "Use");
                  ADD_BIND("i", "Inventory");
                  ADD_BIND("o", "Object");
                  ADD_BIND("p", "Pick up");
                  ADD_BIND("l", "Look");
                  ADD_BIND("b", "Black and White / Color");
                  break;
            case GID_FT:
                  ADD_BIND("e", "Eyes");
                  ADD_BIND("t", "Tongue");
                  ADD_BIND("i", "Inventory");
                  ADD_BIND("p", "Punch");
                  ADD_BIND("k", "Kick");
                  break;
            case GID_DIG:
                  ADD_BIND("e", "Examine");
                  ADD_BIND("t", "Regular cursor");
                  ADD_BIND("i", "Inventory");
                  ADD_BIND("c", "Comm");
                  break;
            case GID_CMI:
                  ADD_BIND("F1", "Save / Load / Options");
                  ADD_BIND("e", "Examine");
                  ADD_BIND("t", "Talk to");
                  ADD_BIND("i", "Inventory");
                  ADD_BIND("u", "Use");
                  break;
            }
            break;
      case 4:
            switch (gameId) {
            case GID_MANIAC:
            case GID_ZAK:
                  title = "Other game controls:";
                  ADD_TEXT("Inventory: (not yet implemented)");
                  ADD_BIND("u", "Scroll list up");
                  ADD_BIND("j", "Scroll list down");
                  ADD_BIND("i", "Upper left item");
                  ADD_BIND("k", "Lower left item");
                  ADD_BIND("o", "Upper right item");
                  ADD_BIND("l", "Lower right item");
                  ADD_LINE;
                  ADD_TEXT("Switching characters:");
                  if (gameId == GID_MANIAC) {
                        ADD_BIND("F1", "Dave");
                        ADD_BIND("F2", "Second kid");
                        ADD_BIND("F3", "Third kid");
                  } else {
                        ADD_BIND("F1", "Zak");
                        ADD_BIND("F2", "Annie");
                        ADD_BIND("F3", "Melissa");
                        ADD_BIND("F4", "Leslie");
                  }
                  break;
            case GID_INDY3:
            case GID_ZAK256:
                  title = "Other game controls:";
                  ADD_TEXT("Inventory:");
                  ADD_BIND("y", "Upper left item");
                  ADD_BIND("h", "Middle left item");
                  ADD_BIND("n", "Lower left item");
                  ADD_BIND("u", "Upper right item");
                  ADD_BIND("j", "Middle right item");
                  ADD_BIND("m", "Lower right item");
                  ADD_BIND("o", "Scroll list up");
                  ADD_BIND("l", "Scroll list down");
                  if (gameId == GID_ZAK256) {
                        ADD_LINE;
                        ADD_TEXT("Switching characters:");
                        ADD_BIND("F1", "Zak");
                        ADD_BIND("F2", "Annie");
                        ADD_BIND("F3", "Melissa");
                        ADD_BIND("F4", "Leslie");
                  }
                  break;
            }
            break;
      case 5:
            switch (gameId) {
            case GID_INDY3:
                  title = "Fighting controls (numpad):";
                  ADD_BIND("7", "Step back");
                  ADD_BIND("4", "Step back");
                  ADD_BIND("1", "Step back");
                  ADD_BIND("8", "Block high");
                  ADD_BIND("5", "Block middle");
                  ADD_BIND("2", "Block low");
                  ADD_BIND("9", "Punch high");
                  ADD_BIND("6", "Punch middle");
                  ADD_BIND("3", "Punch low");
                  ADD_LINE;
                  ADD_LINE;
                  ADD_TEXT("These are for Indy on left.");
                  ADD_TEXT("When Indy is on the right,");
                  ADD_TEXT("7, 4, and 1 are switched with");
                  ADD_TEXT("9, 6, and 3, respectively.");
                  break;
            }
            break;
      case 6:
            switch (gameId) {
            case GID_INDY3:
                  title = "Biplane controls (numpad):";
                  ADD_BIND("7", "Fly to upper left");
                  ADD_BIND("4", "Fly to left");
                  ADD_BIND("1", "Fly to lower left");
                  ADD_BIND("8", "Fly upwards");
                  ADD_BIND("5", "Fly straight");
                  ADD_BIND("2", "Fly down");
                  ADD_BIND("9", "Fly to upper right");
                  ADD_BIND("6", "Fly to right");
                  ADD_BIND("3", "Fly to lower right");
                  break;
            }
            break;
      }
      while (i < HELP_NUM_LINES) {
            ADD_LINE;
      }
}

#undef ADD_BIND
#undef ADD_TEXT
#undef ADD_LINE

} // End of namespace Scumm

Generated by  Doxygen 1.6.0   Back to index