Пример #1
0
 private void talk(int p, final Thing t) {
   int subtype = getStat("SubType");
   Thing h = Game.hero();
   try {
     switch (p) {
       case CHATTER:
         t.incStat("ChatCount", 1);
         handleChatter(subtype, t.getStat("ChatCount"), t);
         return;
       case TEACHER:
         if (h.getStat(RPG.ST_SKILLPOINTS) > 0) {
           Game.message("\"I see you have potential\"");
           Game.message("\"I can teach you for a small fee...\"");
         } else {
           Game.message("\"There is nothing more I can teach you now.\"");
         }
         return;
         // added by ppirrip
       case BLACKSMITH:
         Game.message("\"I can repair your gear for a small fee...\"");
         return;
       default:
         Game.message("You get no response.");
     }
   } catch (Exception e) {
     e.printStackTrace();
     Game.message("\"Mumble mumble mumble\"");
   }
 }
Пример #2
0
  public static void init() {
    Thing t;

    // base monster template
    t = Lib.extend("base animal", "base being");
    t.set("IsMonster", 0);
    t.set(RPG.ST_AIMODE, "Evade");
    t.set("IsHostile", 0);
    t.set("IsAnimal", 1);
    t.set("Frequency", 50);
    t.set("IsIntelligent", 0);
    t.set("LevelMin", 1);
    t.set("LevelMax", 100);
    t.set("XPValue", 5);
    Lib.add(t);

    initWildLife();
  }
Пример #3
0
 private void handleChatter(final int subtype, final int chats, final Thing t) {
   final ChatterComment cc = chattercomments[subtype];
   switch (chats) {
     case 1:
       // -this is first converstaion to Hero - try to say hello
       if (cc.hello.length != 0 && RPG.p(cc.helloProbability)) {
         Game.quotedMessage(RPG.pick(cc.hello));
         break;
       }
     default:
       // say comment
       Game.message("\"" + RPG.pick(cc.comments) + "\"");
       t.set("ChatCount", 100);
   }
 }
Пример #4
0
  private String getDeathString(Thing h) {
    if (h.getStat("HPS") <= 0) {
      Thing t = h.getThing("Killer");
      if (t == null) {
        return "Killed by divine power";
      }
      t.remove();

      String killer = t.getAName();
      if (t.getFlag("IsEffect")) killer = t.name();

      if (killer.equals("you")) killer = "stupidity";
      return "Killed by " + killer;
    }

    return "Defeated The Tyrant";
  }
Пример #5
0
  /** Check that random adds add Things to different squares assuming a free square is available */
  public void testRandomAdds() {
    Map map = new Map(2, 1);
    map.fillArea(0, 0, 1, 0, Tile.CAVEFLOOR);

    Thing a = new Thing();
    Thing b = new Thing();
    map.addThing(a);
    map.addThing(b);

    assertTrue(a.getMap() == map);
    assertTrue(b.getMap() == map);
    assertTrue(a.y == 0);
    assertTrue(b.y == 0);
    assertTrue(a.x != b.x);

    Thing c = new Thing();
    map.addThing(c);
    assertTrue(c.getMap() == map);
  }
Пример #6
0
  // called to check for random encounters
  public static void encounter(Map map, int x, int y) {
    if (Rand.d(20) > 1) return;

    Thing h = Game.hero();

    // don't have encounters on location squares
    Thing[] ts = map.getPortals(x, y);
    if (ts.length > 0) return;

    int tile = map.getTile(x, y);
    if (tile == Tile.SEA) {
      return;
    }

    switch (Rand.d(8)) {
      case 1:
        {
          Game.message("You see somebody in the distance");
          break;
        }

      case 2:
        {
          Thing c = Lib.createType("IsHostile", Game.hero().getStat(RPG.ST_LEVEL) + Rand.r(6));
          Game.message("You see " + c.getAName() + " waiting to ambush travellers");
          Game.message("Do you want to attack? (y/n)");

          if (Game.getOption("yn") == 'y') {
            Game.message("");

            // create location map
            Map nm = createArea(map, x, y);

            nm.addThing(Game.hero(), 32, 32);
            nm.addThing(c, 32, 25);

            // companions
            if (Rand.d(2) == 1) {
              for (int i = Rand.d(6); i > 0; i--) {
                int gx = 28 + Rand.r(9);
                int gy = 18 + Rand.r(7);
                if (!nm.isBlocked(gx, gy)) {
                  nm.addThing(c.cloneType(), gx, gy);
                }
              }
              if ((Rand.d(2) == 1) && (!nm.isBlocked(32, 20))) {
                nm.addThing(Lib.createFoe(Game.hero().getStat(RPG.ST_LEVEL) + 1), 32, 20);
              }
            }
          } else {
            Game.message("You avoid the encounter");
          }
          break;
        }

      case 3:
        {
          Thing c = Lib.createFoe(Game.hero().getStat(RPG.ST_LEVEL) + 2);
          Game.message("You see some villagers being attacked by " + c.getPluralName());
          Game.message("Do you want to aid them? (y/n)");

          if (Game.getOption("yn") == 'y') {
            // create location map
            Map nm = createArea(map, x, y);

            nm.addThing(Game.hero(), 32, 32);

            // villages
            for (int i = Rand.d(2, 3); i > 0; i--) {
              int gx = 29 + Rand.r(7);
              int gy = 28 + Rand.r(7);
              if (!nm.isBlocked(gx, gy))
                switch (Rand.d(3)) {
                  case 1:
                    nm.addThing(Lib.create("farmer"), gx, gy);
                    break;
                  case 2:
                    nm.addThing(Lib.create("village girl"), gx, gy);
                    break;
                  case 3:
                    nm.addThing(Lib.create("townswoman"), gx, gy);
                    break;
                }
            }

            // critters
            for (int i = Rand.d(2, 6); i > 0; i--) {
              int gx = 28 + Rand.r(9);
              int gy = 21 + Rand.r(7);
              if (!nm.isBlocked(gx, gy)) {
                nm.addThing(c.cloneType(), gx, gy);
              }
            }
            // boss critter
            nm.addThing(Lib.createFoe(Game.hero().getStat(RPG.ST_LEVEL) + 4), 32, 20);
          } else {
            Game.message("You leave them to their fate");
          }
          break;
        }

      case 4:
        {
          Game.message("You are slowed by bad weather conditions.");
          h.incStat("APS", -1000);
          break;
        }

      case 5:
        {
          int level = h.getLevel();
          if (level <= 2) break;

          Game.message("You are ambushed by a horde of fearsome monsters!");
          Game.message("[Press space to continue]");
          Game.getOption(" ");

          Map nm = createArea(map, x, y);
          nm.set("IsHostile", 1);

          nm.addThing(Game.hero(), 32, 32);

          for (int i = 0; i < 40 + 3 * level; i++) {
            nm.addThing(Lib.createType("IsMonster", level));
          }

          break;
        }

      case 6:
        {
          Thing[] its = h.getItems();
          Thing it = (its.length > 0) ? its[Rand.r(its.length)] : null;
          if ((it != null) && !it.getFlag("IsCursed") && (Item.value(it) > 0)) {

            Game.message("You encounter a band of nasty goblinoids!");
            Game.message("They demand " + it.getYourName() + " as 'tax'");
            Game.message("Do you want to fight them? (y/n)");
            char c = Game.getOption("yn");
            while (!((c == 'y') || (c == 'n'))) c = Game.getOption("yn");

            if (c == 'n') {
              it.remove();
              if (Rand.d(50) <= h.getLevel()) {
                Game.message("They decide to attack you anyway!");
                c = 'y';
              } else {
                Game.message("They take " + it.getYourName() + " and run away gleefully");
              }
            } else {
              // don't lose an item
              it = null;
            }

            if (c == 'y') {
              Map nm = createArea(map, x, y);
              nm.set("IsHostile", 1);

              nm.addThing(Game.hero(), 32, 32);
              nm.addThing(it, 32, 36);
              int level = h.getLevel();

              for (int i = 0; i < (2 + level); i++) {
                nm.addThing(
                    Lib.createType("IsGoblinoid", level), h.x - 3, h.y + 1, h.x + 3, h.y + 4);
              }
            }
          }

          break;
        }
    }
  }
Пример #7
0
 public boolean handle(Thing t, Event ae) {
   Thing h = Game.hero();
   // Game.warn("EncounterAction: "+time);
   encounter(h.getMap(), h.x, h.y);
   return false;
 }
Пример #8
0
  public void gameOver() {
    Wish.makeWish("identification", 100);
    Game.message("");

    Thing h = Game.hero();

    String outcome = getDeathString(h);

    String story = null;

    getScreen().getMappanel().repaint();

    String hresult = "No high score available in debug mode";

    int sc = h.getStat("Score");
    String score = Integer.toString(sc);
    String level = Integer.toString(h.getLevel());
    String seed = Integer.toString(h.getStat("Seed"));
    String name = h.getString("HeroName");
    String profession = h.getString("Profession");
    String race = h.getString("Race");

    try {
      String urldeath = URLEncoder.encode(outcome, fileEncoding);
      String urlname = URLEncoder.encode(name, fileEncoding);

      String check =
          Integer.toString((sc + name.length() * profession.length() * race.length()) ^ 12345678);
      String st =
          "&name="
              + urlname
              + "&race="
              + race
              + "&profession="
              + profession
              + "&level="
              + level
              + "&score="
              + score
              + "&check="
              + check
              + "&version="
              + Game.VERSION
              + "&seed="
              + seed
              + "&death="
              + urldeath;

      String url = "http://tyrant.sourceforge.net/logscore.php?client=tyrant" + st;

      Game.warn((Game.isDebug() ? "NOT " : "") + "Sending data:");
      Game.warn(st);

      if (!Game.isDebug()) {
        URL u = new URL(url);
        InputStream s = u.openStream();

        String returnstring = "";
        int b = s.read();
        while (b >= 0) {
          returnstring = returnstring + (char) b;
          b = s.read();
        }

        int ok = returnstring.indexOf("OK:");
        if (ok >= 0) {
          hresult = "High score logged.\n";
          hresult += "You are in position " + returnstring.substring(ok + 3).trim();
        } else {
          hresult = "Failed to log high score";
          Game.warn(returnstring);
        }
      }
    } catch (Exception e) {
      Game.warn(e.getMessage());
      hresult = "High score feature not available";
    }

    if ((!h.isDead())) {
      story =
          "You have defeated The Tyrant!\n"
              + "\n"
              + "Having saved the world from such malevolent evil, you are crowned as the new Emperor of Daedor, greatly beloved by all the people of the Earth.\n"
              + "\n"
              + "You rule an Empire of peace and prosperity, and enjoy a long and happy life.\n"
              + "\n"
              + "Hurrah for Emperor "
              + h.getString("HeroName")
              + "!!\n";

      if (Game.isDebug()) {
        story =
            "You have defeated The Tyrant in Debug Mode.\n"
                + "\n"
                + "Now go and do it the hard way....\n";
      }

    } else {
      story =
          "\n"
              + "It's all over...... "
              + outcome
              + "\n"
              + "\n"
              + "You have failed in your adventures and died a hideous death.\n"
              + "\n"
              + "You reached level "
              + level
              + "\n"
              + "Your score is "
              + score
              + "\n"
              + "\n"
              + hresult
              + "\n";
    }

    Game.message("GAME OVER - " + outcome);

    Game.message("Would you like to see your final posessions? (y/n)");

    char c = Game.getOption("yn");

    if (c == 'y') {
      Game.selectItem("Your final posessions:", h);
    }

    // display the final story
    Game.scrollTextScreen(story);

    // display the final story
    String killData = Hero.reportKillData();
    Game.scrollTextScreen(killData);

    Game.over = true;

    Lib.clear();

    // recreate lib in background
    Game.asynchronousCreateLib();
  }
Пример #9
0
  // creates a hero according to specified parameters
  public Thing createHero(boolean prompts) {
    long start = System.currentTimeMillis();
    String race = null;
    String profession = null;

    if (!prompts) {
      race = "human";
      profession = "fighter";
      Game.setDebug(true);
    }

    // get list of races
    String[] raceherostrings = Hero.heroRaces();
    String[] racedescriptions = Hero.heroRaceDescriptions();
    if (race == null) {
      DetailedListScreen ls =
          new DetailedListScreen("What race are you?", raceherostrings, racedescriptions);
      ls.setForeground(new Color(128, 128, 128));
      ls.setBackground(new Color(0, 0, 0));
      ls.bottomString = "Press a letter key to select your race";
      switchScreen(ls);
      while (true) {
        race = (String) ls.getObject();
        // Game.warn(race);
        if ((race != null) || Game.isDebug()) break;
      }
    }

    if (race == null) {
      // Debug mode only
      // have escaped, so choose randomly
      race = raceherostrings[Rand.r(raceherostrings.length)];
      String[] herostrings = Hero.heroProfessions(race);
      profession = herostrings[Rand.r(herostrings.length)];
    }

    // get list of possible prfessions
    String[] professionstrings = Hero.heroProfessions(race);
    String[] professiondescriptions = Hero.heroProfessionDescriptions(race);
    if (profession == null) {

      DetailedListScreen ls =
          new DetailedListScreen(
              "What is your profession?", professionstrings, professiondescriptions);
      ls.bottomString = "Press a letter key to select your profession";
      ls.setForeground(new Color(128, 128, 128));
      ls.setBackground(new Color(0, 0, 0));
      switchScreen(ls);

      while (profession == null) {
        profession = (String) ls.getObject();
      }
    }

    Thing h = Hero.createHero(prompts ? null : "QuickTester", race, profession);

    // hero name and history display
    String name = "QuickTester";
    if (prompts) {
      // setup screen to get name
      Screen ss = new Screen(this);
      ss.setBackground(new Color(0, 0, 0));
      ss.setLayout(new BorderLayout());
      {
        InfoScreen ts = new InfoScreen(this, h.getString("HeroHistory"));
        ts.setBackground(new Color(0, 0, 0));
        ss.add("Center", ts);
      }
      MessagePanel mp = new MessagePanel(this);
      Game.messagepanel = mp;
      ss.add("South", mp);

      switchScreen(ss);

      name = getHeroName(true);
      if (name == null) return null;
    }
    Hero.setHeroName(h, name);

    System.out.println((System.currentTimeMillis() - start) + "ms to createHero");
    return h;
  }
Пример #10
0
  public static void initWildLife() {
    Thing t;

    t = Lib.extend("rabbit", "base animal");
    t.set("IsHostile", 0);
    t.set("Image", 285);
    t.set("IsOwned", 1);
    t.set("MoveSpeed", 140);
    Monster.stats(t, 3, 2, 15, 3, 1, 2, 1, 1);
    t.set("DeathDecoration", "piece of rabbit meat");
    Lib.add(t);

    t = Lib.extend("hare", "rabbit");
    t.set("MoveSpeed", 240);
    Monster.stats(t, 3, 2, 25, 3, 1, 2, 1, 1);
    t.set("DeathDecoration", "piece of hare meat");
    Lib.add(t);

    t = Lib.extend("butterfly", "base animal");
    t.set("IsHostile", 0);
    t.set("IsBlocking", 0);
    t.set("Image", 294);
    t.set("IsItem", 1);
    t.set("DeathDecoration", null);
    t.set("ItemWeight", 100);
    Monster.stats(t, 1, 1, 5, 1, 1, 1, 1, 1);
    Lib.add(t);

    t = Lib.extend("snail", "base animal");
    t.set("IsHostile", 0);
    t.set("IsOwned", 1);
    t.set("Image", 387);
    t.set("MoveSpeed", 40);
    Monster.stats(t, 1, 1, 5, 1, 1, 1, 1, 1);
    t.set("DeathDecoration", "slime pool");
    Lib.add(t);

    t = Lib.extend("escargot", "base animal");
    t.set("IsHostile", 0);
    t.set("IsOwned", 1);
    t.set("Image", 387);
    t.set("MoveSpeed", 40);
    Monster.stats(t, 1, 1, 5, 1, 1, 1, 1, 1);
    t.set("DeathDecoration", "escargot steak");
    t.set("ASCII", "e");
    Lib.add(t);

    t = Lib.extend("slug", "base animal");
    t.set("IsHostile", 0);
    t.set("Image", 386);
    t.set("MoveSpeed", 40);
    Monster.stats(t, 1, 1, 5, 1, 1, 1, 1, 1);
    t.set("DeathDecoration", "poison cloud");
    Lib.add(t);

    t = Lib.extend("flutterby", "butterfly");
    t.set("DecayRate", 1000);
    t.addHandler("OnAction", Scripts.decay());
    Lib.add(t);
  }