Example #1
1
  public static void addDebugModifications(Thing h) {
    h.set("IsImmortal", 1);
    h.set("IsDebugMode", 1);

    if ("QuickTester".equals(h.getString("HeroName"))) {
      h.addThing(Spell.create("Annihilation"));
      h.addThing(Spell.create("Blaze"));
      h.addThing(Spell.create("Ultimate Destruction"));
      Wish.makeWish("skills", 100);
    }
  }
Example #2
0
 public static void addSubQuest(Thing q, Thing sq) {
   ArrayList qs = (ArrayList) q.get("Quests");
   if (qs == null) {
     qs = new ArrayList();
     q.set("Quests", qs);
   }
   sq.set("Parent", q);
   qs.add(sq);
 }
Example #3
0
 public static void addQuest(Thing h, Thing q) {
   ArrayList qs = (ArrayList) h.get("Quests");
   if (qs == null) {
     qs = new ArrayList();
     h.set("Quests", qs);
   }
   q.set("Hero", h);
   qs.add(q);
 }
Example #4
0
 public static Thing createKillNumberQuest(String desc, String name, int number) {
   Thing t = Lib.create("kill number quest");
   if (name.startsWith("[")) {
     t.set("TargetType", name.substring(1, name.length() - 1));
   } else {
     t.set("TargetName", name);
   }
   t.set("TargetCount", number);
   t.set("Description", desc);
   return t;
 }
Example #5
0
  public static Thing createHero(String name, String race, String profession) {

    Thing h = createBaseHero(race);
    Game.instance().initialize(h);

    if ((name == null) || (name.equals(""))) name = "Tester";
    setHeroName(h, name);

    // Debug mode modifications
    if (Game.isDebug()) {
      addDebugModifications(h);
    }

    // Race Modifications
    applyRace(h, race);

    // Professions
    applyProfession(h, profession);

    // Bonus items based on skills
    applyBonusItems(h);

    // set up HPS and MPS
    h.set(RPG.ST_HPSMAX, h.getBaseStat(RPG.ST_TG) + RPG.d(6));
    h.set(RPG.ST_MPSMAX, h.getBaseStat(RPG.ST_WP) + RPG.d(6));

    h.set(RPG.ST_HPS, h.getStat(RPG.ST_HPSMAX));
    h.set(RPG.ST_MPS, h.getStat(RPG.ST_MPSMAX));

    Being.utiliseItems(h);

    Wish.makeWish("id", 100);

    // score starts at zero
    h.set("Score", 0);

    // religion
    ArrayList gods = Gods.getPossibleGods(h);
    int gl = gods.size();
    if (gl > 0) {
      h.set("Religion", gods.get(RPG.r(gl)));
    } else {
      Game.warn("No religion available for " + race + " " + profession);
    }

    createHeroHistory(h);

    // performance improvement with flattened properties
    h.flattenProperties();

    return h;
  }
Example #6
0
 private static HashMap getKillHashMap() {
   Thing h = Game.hero();
   HashMap hm = (HashMap) h.get("Kills");
   if (hm == null) {
     hm = new HashMap();
     h.set("Kills", hm);
   }
   return hm;
 }
Example #7
0
  public static void setComplete(Thing q) {
    if (!q.getFlag("IsActive")) {
      throw new Error("Trying to complete a non-active quest");
    }
    q.set("IsComplete", 1);
    q.set("IsActive", 0);

    if (q.handles("OnQuestComplete")) {
      Event e = new Event("QuestComplete");
      e.set("Quest", q);
      q.handle(e);
    }

    Thing parent = q.getThing("Parent");
    if (parent != null) {
      Event e = new Event("SubQuestComplete");
      e.set("Quest", q);
      q.handle(e);
    }
  }
Example #8
0
  // can't do anything in monster action phase
  // but allow for hunger effects
  public static void action(Thing h, int t) {
    // hunger
    int hunger = h.getStat(RPG.ST_HUNGER);
    int hungerThreshold = h.getStat("HungerThreshold");
    hunger = RPG.min(hungerThreshold * 3, hunger + (t * 6) / (6 + h.getStat(Skill.SURVIVAL)));
    h.set(RPG.ST_HUNGER, hunger);

    // bad things
    int hl = hunger / hungerThreshold;
    switch (hl) {
      case 0:
      case 1:
        // OK
        break;
      case 2:
        for (int i = RPG.po(t, 10000); i > 0; i--) {
          Game.message("You feel weak with hunger!");
          String stat = RPG.pick(hungerDecayStats);
          int sv = h.getBaseStat(stat);
          if (!h.getFlag("IsImmortal")) h.set(stat, RPG.max(sv - 1, 1));
        }
        break;
      case 3:
        // dying of hunger
        int loss = RPG.po(t / 1000.0);
        if (loss > 0) Game.message("You are dying of hunger!!");
        if (!h.getFlag("IsImmortal")) h.incStat("HPSMAX", -loss);
        if (!h.getFlag("IsImmortal")) h.incStat("HPS", -loss * 2);
        break;
    }

    // SPECIAL ABILITIES
    // thief searches
    for (int i = RPG.po(t * h.getStat(Skill.ALERTNESS) * h.getStat(RPG.ST_CR), 10000); i > 0; i--) {
      Secret.search();
    }
  }
Example #9
0
  /**
   * This function awards some bonus items based on the hero's professional skills.
   *
   * @param h
   */
  private static void applyBonusItems(Thing h) {
    if (h.getFlag(Skill.PRAYER)) {
      Thing t = Lib.create("potion of holy water");
      t.set("Number", h.getStat(Skill.PRAYER));
      h.addThingWithStacking(t);
    }

    if (h.getFlag(Skill.TRADING)) {
      Thing t = Lib.create("sovereign");
      t.set("Number", h.getStat(Skill.TRADING));
      h.addThingWithStacking(t);
    }

    if (h.getFlag(Skill.WEAPONLORE)) {
      Thing t = Lib.createType("IsWeapon", RPG.d(2, 6));
      h.addThingWithStacking(t);
    }

    if (h.getFlag(Skill.COOKING)) {
      Thing t = Lib.createType("IsFood", 25);
      t.set("Number", h.getStat(Skill.COOKING));
      h.addThingWithStacking(t);
    }

    if (h.getFlag(Skill.ARCHERY)) {
      //			 a reanged weapon + ammo
      Thing t = Lib.createType("IsRangedWeapon", RPG.d(h.getStat(Skill.ARCHERY), 6));
      Thing ms = RangedWeapon.createAmmo(t, RPG.d(h.getStat(Skill.ARCHERY), 6));
      h.addThing(t);
      h.addThing(ms);
    }

    Thing[] ws = h.getFlaggedContents("IsWeapon");
    if (ws.length == 0) {
      h.addThing(Lib.createType("IsWeapon", 1));
    }
  }
Example #10
0
  /*
   * Gives a number of experience points to the hero
   */
  public static void gainExperience(int x) {
    Thing h = Game.hero();
    // if (QuestApp.debug) Game.warn("You gain "+x+" experience points");
    int exp = h.getBaseStat(RPG.ST_EXP) + x;
    int level = h.getBaseStat(RPG.ST_LEVEL);

    int requiredForNextLevel = calcXPRequirement(level + 1);
    while (exp >= requiredForNextLevel) {
      if (level < 50) {
        Being.gainLevel(h);
        exp -= requiredForNextLevel;
        level++;
        requiredForNextLevel = calcXPRequirement(level + 1);
      } else {
        exp = requiredForNextLevel - 1;
      }
    }
    h.set(RPG.ST_EXP, exp);
  }
Example #11
0
  public static void createHeroHistory(Thing h) {
    StringBuffer sb = new StringBuffer();

    ///////////////
    // Birth-day
    Calendar today = Calendar.getInstance();
    int day = today.get(Calendar.DAY_OF_MONTH);
    int month = today.get(Calendar.MONTH) + 1;
    String birthDay = (day) + "/" + (month);
    String dayString = Text.ordinal(day);
    String monthString = months[month];

    String r = h.getString("Race");
    sb.append(
        "You are born "
            + (Text.isVowel(r.charAt(0)) ? "an" : "a")
            + " "
            + r
            + " on the "
            + dayString
            + " of "
            + monthString
            + ". ");

    if (birthDay.equals("14/2")) {
      sb.append("Everyone agreed you were a charming baby. ");
      h.incStat("CH", RPG.d(6));
      h.incStat(Skill.SEDUCTION, 1);
    }

    if (birthDay.equals("1/1")) {
      sb.append("A bright star shone in the sky when you were born. ");
      h.incStat("WP", RPG.d(6));
    }

    sb.append("\n\n");

    //////////////////
    // childhood
    switch (RPG.d(7)) {
      case 1:
        sb.append("You had an unhappy childhood, finding it hard to relate to your peers.");
        h.incStat("WP", RPG.d(3));
        h.incStat("CH", -1);
        break;
      case 2:
        sb.append("You had a happy childhood, with supportive parents who taught you well.");
        h.incStat("IN", RPG.d(3));
        h.incStat("CH", -1);
        break;
      case 3:
        sb.append(
            "You were always getting into trouble as a child, but somehow everything seemed to work out for you. Wise elders were convinced that fortune favoured you. ");
        h.incStat("Luck", 5);
        break;
      case 4:
        sb.append(
            "You enjoyed playing outdoors as a child, and excelled in particular at sports. Your peers developed a healthy respect for your talents.");
        h.incStat(Skill.ATHLETICS, 1);
        h.incStat("CH", RPG.d(4));
        h.incStat("IN", -2);
        break;
      case 5:
        sb.append(
            "You were badly behaved as a child. You bullied smaller children relentlessly. You came to lead an impressive gang, though they followed you more out of fear than respect.");
        h.incStat("CH", -1);
        h.incStat("IN", -3);
        h.incStat("ST", 2);
        break;
      default:
        sb.append("You had an uneventful childhood, and yearned for adventure.");
        break;
    }
    sb.append("\n\n");

    /////////////
    // religion
    String god = h.getString("Religion");
    sb.append("You were brough up to worship " + god + ". ");
    switch (RPG.d(5)) {
      case 1:
        sb.append(
            "You avoided religious ceremonies, as you disliked your priest intensely. You even came to feel that he had laid a curse upon you. ");
        h.incStat("Luck", -4);
        break;
      case 2:
        sb.append(
            "You were extremely devout. It caused you great anguish because you never felt that "
                + god
                + " was truly close to you. ");
        h.incStat("WP", 1);
        h.incStat("CH", -1);

        break;
      case 3:
        sb.append(
            "You were extremely devout, and your priest praised you for having earnt the blessing of "
                + god
                + ". ");
        h.incStat("Luck", 4);
        h.incStat(RPG.ST_FATE, 1);
        break;
      default:
        sb.append(
            "You were not particularly devout, but still felt that "
                + god
                + " would protect you. ");
        break;
    }
    sb.append(Gods.get(god).getString("UpbringingText") + " ");
    sb.append("\n\n");

    ////////////////
    // growing up
    switch (RPG.d(5)) {
      case 1:
        sb.append(
            "As you grew up, you felt that you were destined for greatness. Everyone else thought that you were merely arrogant. ");
        h.incStat(RPG.ST_SKILLPOINTS, 1);
        h.incStat("CH", -3);
        break;
      case 2:
        sb.append(
            "As you grew up, you found yourself with the remarkable ability to learn creative skills. You had a tendency to dedicate too much time to creative pursuits at the expense of other activities. ");
        h.incStat(
            RPG.pick(new String[] {Skill.SMITHING, Skill.PAINTING, Skill.MUSIC, Skill.COOKING}), 1);
        h.incStat("ST", -1);
        h.incStat("IN", -1);
      case 3:
        sb.append(
            "Later in your youth, you fell hopelessly in love. Sadly, this was not returned. Heartbroken, you spent countless days wandering alone trying to fathom the meaning of life. ");
        h.incStat("CH", -1);
        h.incStat("ST", -1);
        h.incStat("IN", 2);
        h.incStat(Skill.PERCEPTION, 1);
        break;
      default:
        sb.append(
            "You grew up without any particularly great events shaping your life. But you still knew that one day you would set out to achieve greatness. ");
        break;
    }
    sb.append("\n\n");

    /////////////
    // training
    String p = h.getString("Profession");
    sb.append(
        "Determined to make something of your life, you began your "
            + p
            + " training as soon as you were old enough. ");
    switch (RPG.d(5)) {
      default:
        sb.append(
            "You showed a good aptitude for your chosen career, and before too long your tutor proclaimed you as a fully trained "
                + p
                + ".");
        break;
    }
    sb.append("\n\n");

    // ensure all stats are >=1
    String[] sks = Being.statNames();
    for (int i = 0; i < sks.length; i++) {
      if (h.getStat(sks[i]) <= 0) {
        h.set(sks[i], 1);
      }
    }

    h.set("HeroHistory", sb.toString());
  }
Example #12
0
 public static Thing createVisitMapQuest(String desc, String targetString) {
   Thing t = Lib.create("visit map quest");
   t.set("TargetMapName", targetString);
   t.set("Description", desc);
   return t;
 }
Example #13
0
  public static void init() {
    // initialise base quest templates where needed

    Thing q;

    q = Lib.extend("base quest", "base thing");
    q.set("LevelMin", 1);
    q.set("IsQuest", 1);
    q.set("IsActive", 1);
    q.set("IsPhysical", 0);
    q.set("Frequency", 50);
    q.set(
        "OnQuestComplete",
        new Script() {
          public boolean handle(Thing q, Event e) {
            String desc = q.getString("Description");

            if (desc != null) {
              Game.message("Quest objective complete: " + desc);
            }
            return false;
          }
        });
    Lib.add(q);

    q = Lib.extend("kill quest", "base quest");
    q.addHandler(
        "OnKill",
        new Script() {
          public boolean handle(Thing q, Event e) {
            Thing target = q.getThing("Target");

            if ((target != null) && target.isDead()) {
              setComplete(q);
            }
            return false;
          }
        });
    Lib.add(q);

    q = Lib.extend("kill number quest", "base quest");
    q.addHandler(
        "OnKill",
        new Script() {
          public boolean handle(Thing q, Event e) {
            int target = q.getStat("TargetCount");
            int current = q.getStat("CurrentCount");

            // get the thing that was killed
            Thing killed = e.getThing("Target");

            String targetName = q.getString("TargetName");

            boolean countKill = false;

            if (targetName != null) {
              if (targetName.equals(killed.name())) {
                countKill = true;
              }
            } else {
              String targetType = q.getString("TargetType");
              if ((targetType != null) && killed.getFlag(targetType)) {
                countKill = true;
              }
            }

            if (countKill) {
              current++;
              q.set("CurrentCount", current);

              if (current >= target) {
                setComplete(q);
              }
            }

            return false;
          }
        });
    Lib.add(q);

    q = Lib.extend("visit map quest", "base quest");
    q.addHandler(
        "OnAction",
        new Script() {
          public boolean handle(Thing q, Event e) {
            Map targetMap = (Map) q.get("TargetMap");
            Map heroMap = Game.hero().getMap();
            if (targetMap == null) {
              String targetMapName = q.getString("TargetMapName");
              if (heroMap.name().startsWith(targetMapName)) {
                setComplete(q);
              }
            } else {
              if (heroMap == targetMap) {
                setComplete(q);
              }
            }
            return false;
          }
        });
    Lib.add(q);

    q = Lib.extend("meet quest", "base quest");
    q.addHandler(
        "OnAction",
        new Script() {
          public boolean handle(Thing q, Event e) {
            Thing target = q.getThing("Target");

            Thing h = Game.hero();

            if (target.isDead()) {
              setFailed(q);
              return false;
            }

            if (h.place != target.place) return false;

            // check if character is adjacent to hero
            if ((RPG.abs(h.x - target.x) <= 1) && (RPG.abs(h.y - target.y) <= 1)) {
              setComplete(q);
            }

            return false;
          }
        });
    Lib.add(q);

    q = Lib.extend("sequence quest", "base quest");
    Script subQuestScript =
        new Script() {
          public boolean handle(Thing q, Event e) {
            ArrayList sqs = getSubQuests(q);

            boolean complete = true;
            boolean failed = true;
            for (Iterator it = sqs.iterator(); it.hasNext(); ) {
              Thing sq = (Thing) it.next();

              if (sq.getFlag("IsFailed")) {
                failed = true;
              }

              if (!sq.getFlag("IsComplete")) {
                complete = false;
              }
            }

            if (failed) {
              setFailed(q);
            } else if (complete) {
              setComplete(q);
            }

            return false;
          }
        };
    q.addHandler("OnSubQuestComplete", subQuestScript);
    q.addHandler("OnSubQuestFailed", subQuestScript);
    Lib.add(q);
  }
Example #14
0
 public static void setHeroName(Thing h, String name) {
   h.set("HeroName", name);
 }
Example #15
0
  public static void init() {
    Thing t;

    t = Lib.extend("base poison", "temporary effect");
    t.set("IsActive", 1);
    t.addHandler("OnAction", new PoisonAction());
    t.set("IsPoison", 1);
    t.set("DamageType", "poison");
    t.set("EffectName", "poisoned");
    t.set("ResistStat", "TG");
    t.set("ResistMessage", null);
    t.set("ResistDifficulty", 10);
    t.set("CureDifficulty", 5);
    Lib.add(t);

    t = Lib.extend("weakening poison", "base poison");
    t.set("LifeTime", 50000);
    t.set("EffectName", "poisoned");
    t.set("Strength", 100);
    t.set("Damage", 2);
    t.set("DamageType", "poison");
    t.set("DamageMessage", "You feel sick...");
    t.set("ResistMessage", "You manage to shake off a feeling of weakness");
    t.set("AttributeAddMessage", "You feel weakened!");
    t.add("CarriedModifiers", Modifier.linear("ST", 90, 0));
    Lib.add(t);

    t = Lib.extend("poison", "base poison");
    t.set("LifeTime", 20000);
    t.set("Strength", 200);
    t.set("Damage", 3);
    t.set("DamageType", "poison");
    t.set("ResistMessage", "You feel queasy for a moment");
    t.set("DamageMessage", "You feel the effects of poison...");
    t.set("AttributeAddMessage", "You feel poisoned!");
    Lib.add(t);

    t = Lib.extend("strong poison", "base poison");
    t.set("LifeTime", 30000);
    t.set("Strength", 300);
    t.set("Damage", 6);
    t.set("DamageType", "poison");
    t.set("ResistMessage", "You feel very queasy for a moment");
    t.set("DamageMessage", "You feel the poison weakening you...");
    t.set("AttributeAddMessage", "You feel badly poisoned!");
    t.set("CureDifficulty", 15);
    Lib.add(t);

    t = Lib.extend("deadly poison", "base poison");
    t.set("LifeTime", 40000);
    t.set("Strength", 2000);
    t.set("Damage", 10);
    t.set("DamageType", "poison");
    t.set("ResistMessage", "You feel very queasy for a moment");
    t.set("DamageMessage", "You feel the poison weakening you...");
    t.set("AttributeAddMessage", "You feel badly poisoned!");
    t.set("CureDifficulty", 40);
    Lib.add(t);

    t = Lib.extend("extreme poison", "base poison");
    t.set("LifeTime", 50000);
    t.set("Strength", 6000);
    t.set("Damage", 15);
    t.set("DamageType", "poison");
    t.set("ResistMessage", "You feel very queasy for a moment");
    t.set("DamageMessage", "You feel the poison weakening you...");
    t.set("AttributeAddMessage", "You feel badly poisoned!");
    t.set("CureDifficulty", 100);
    Lib.add(t);

    t = Lib.extend("ultimate poison", "base poison");
    t.set("LifeTime", 100000);
    t.set("Strength", 12000);
    t.set("Damage", 30);
    t.set("DamageType", "poison");
    t.set("ResistMessage", "You feel very queasy for a moment");
    t.set("DamageMessage", "You feel the poison weakening you...");
    t.set("AttributeAddMessage", "You feel badly poisoned!");
    t.set("CureDifficulty", 300);
    Lib.add(t);

    t = Lib.extend("sickness", "base poison");
    t.set("LifeTime", 50000);
    t.set("Strength", 100);
    t.set("Damage", 2);
    t.set("DamageType", "poison");
    t.set("DamageMessage", "You feel sick...");
    t.set("ResistMessage", "You manage to shake off a feeling of illness");
    t.set("AttributeAddMessage", "You feel sick!");
    t.add("CarriedModifiers", Modifier.bonus("ST", -2));
    t.add("CarriedModifiers", Modifier.bonus("SK", -2));
    t.set("CureDifficulty", 15);
    Lib.add(t);

    t = Lib.extend("pestilence", "poison");
    t.set("LifeTime", 120000);
    t.set("Strength", 200);
    t.set("Damage", 4);
    t.set("EffectName", "pestilent");
    t.set("DamageType", "poison");
    t.set("DamageMessage", "You feel grotty...");
    t.set("AttributeAddMessage", "You feel the touch of pestilence!");
    t.set("ResistDifficulty", 20);
    t.addHandler("OnAction", Scripts.generator("fly swarm", 100));
    t.set("CureDifficulty", 25);
    Lib.add(t);

    t = Lib.extend("plague", "poison");
    t.set("LifeTime", 100000);
    t.set("Strength", 200);
    t.set("Damage", 8);
    t.set("EffectName", "plague");
    t.set("DamageType", "poison");
    t.set("DamageMessage", "You feel sick...");
    t.set("AttributeAddMessage", "You feel the touch of the plague!");
    t.set("ResistDifficulty", 20);
    t.add("CarriedModifiers", Modifier.linear("CH", 100, -10));
    t.addHandler("OnAction", Scripts.generator("plague cloud", 30));
    t.set("CureDifficulty", 100);
    Lib.add(t);
  }
Example #16
0
  private static void applyProfession(Thing h, String p) {
    h.set("Profession", p);

    if (p.equals("fighter")) {
      h.set("Image", 7);

      h.incStat(RPG.ST_SK, RPG.r(5));
      h.incStat(RPG.ST_ST, RPG.r(5));
      h.incStat(RPG.ST_AG, RPG.r(4));
      h.incStat(RPG.ST_TG, RPG.r(6));
      h.incStat(RPG.ST_IN, RPG.r(0));
      h.incStat(RPG.ST_WP, RPG.r(0));
      h.incStat(RPG.ST_CH, RPG.r(0));
      h.incStat(RPG.ST_CR, RPG.r(0));
      h.incStat(Skill.ATTACK, 1);
      h.incStat(Skill.DEFENCE, 1);
      h.incStat(Skill.UNARMED, RPG.d(2));
      h.incStat(Skill.WEAPONLORE, RPG.d(2));

    } else if (p.equals("wizard")) {
      h.set("Image", 6);

      h.incStat(RPG.ST_SK, RPG.r(0));
      h.incStat(RPG.ST_ST, RPG.r(0));
      h.incStat(RPG.ST_AG, RPG.r(0));
      h.incStat(RPG.ST_TG, RPG.r(0) - 1);
      h.incStat(RPG.ST_IN, RPG.r(7));
      h.incStat(RPG.ST_WP, RPG.r(5));
      h.incStat(RPG.ST_CH, RPG.r(2));
      h.incStat(RPG.ST_CR, RPG.r(4));
      h.incStat(Skill.IDENTIFY, RPG.r(2));
      h.incStat(Skill.LITERACY, RPG.d(3));
      h.incStat(Skill.TRUEMAGIC, RPG.d(2));
      h.incStat(Skill.CASTING, RPG.d(2));
      h.incStat(Skill.FOCUS, RPG.d(2));
      h.addThing(Spell.randomOffensiveSpell(Skill.TRUEMAGIC, 3));

      h.incStat("Luck", -5);

      // book and scroll
      h.addThing(SpellBook.create(Skill.TRUEMAGIC, RPG.d(6)));
      h.addThing(Lib.create("[IsScroll]"));

    } else if (p.equals("shaman")) {
      h.set("Image", 6);

      h.incStat(RPG.ST_SK, RPG.r(0));
      h.incStat(RPG.ST_ST, RPG.r(0));
      h.incStat(RPG.ST_AG, RPG.r(0));
      h.incStat(RPG.ST_TG, RPG.r(0));
      h.incStat(RPG.ST_IN, RPG.r(4));
      h.incStat(RPG.ST_WP, RPG.r(4));
      h.incStat(RPG.ST_CH, RPG.r(5));
      h.incStat(RPG.ST_CR, RPG.r(6));
      h.incStat(Skill.IDENTIFY, RPG.r(2));
      h.incStat(Skill.LITERACY, RPG.r(2));
      h.incStat(Skill.BLACKMAGIC, RPG.d(3));
      h.incStat(Skill.CASTING, RPG.d(2));
      h.incStat(Skill.HERBLORE, RPG.d(2));
      h.addThing(Spell.randomSpell(Skill.BLACKMAGIC, 3));

      h.incStat("Luck", 15);

      // herbs and monster parts
      for (int i = 0; i < 10; i++) h.addThingWithStacking(Lib.createType("IsHerb", RPG.d(10)));
      for (int i = 0; i < 6; i++)
        h.addThingWithStacking(Lib.createType("IsMonsterPart", RPG.d(10)));

    } else if (p.equals("witch")) {
      h.set("Image", 32);

      h.incStat(RPG.ST_SK, RPG.r(0));
      h.incStat(RPG.ST_ST, RPG.r(0));
      h.incStat(RPG.ST_AG, RPG.r(0));
      h.incStat(RPG.ST_TG, RPG.r(0));
      h.incStat(RPG.ST_IN, RPG.r(5));
      h.incStat(RPG.ST_WP, RPG.r(4));
      h.incStat(RPG.ST_CH, RPG.r(4));
      h.incStat(RPG.ST_CR, RPG.r(6));
      h.incStat(Skill.LITERACY, 1);
      h.incStat(Skill.BLACKMAGIC, 1);
      h.incStat(Skill.CASTING, 1);
      h.incStat(Skill.HERBLORE, RPG.r(3));
      h.incStat(Skill.COOKING, RPG.r(3));

      for (int i = 0; i < 10; i++) h.addThingWithStacking(Lib.createType("IsHerb", RPG.d(10)));
      h.addThing(Spell.randomSpell(Skill.BLACKMAGIC, 3));

      h.incStat("Luck", 10);

      h.addThing(Lib.create("[IsScroll]"));
      h.addThing(SpellBook.create(Skill.BLACKMAGIC, RPG.d(8)));

    } else if (p.equals("war-mage")) {
      h.set("Image", 6);

      h.incStat(RPG.ST_SK, RPG.r(2));
      h.incStat(RPG.ST_ST, RPG.r(2));
      h.incStat(RPG.ST_AG, RPG.r(2));
      h.incStat(RPG.ST_TG, RPG.r(2));
      h.incStat(RPG.ST_IN, RPG.r(2));
      h.incStat(RPG.ST_WP, RPG.r(4));
      h.incStat(RPG.ST_CH, RPG.r(2));
      h.incStat(RPG.ST_CR, RPG.r(4));
      h.incStat(Skill.LITERACY, 1);
      h.incStat(Skill.TRUEMAGIC, RPG.r(3));
      h.incStat(Skill.HEALING, RPG.d(2));
      h.incStat(Skill.CASTING, RPG.d(2));
      h.addThing(Spell.randomSpell(Skill.TRUEMAGIC, 3));

      h.incStat("Luck", 0);

    } else if (p.equals("runecaster")) {
      h.set("Image", 6);

      h.incStat(RPG.ST_SK, RPG.r(0));
      h.incStat(RPG.ST_ST, RPG.r(0));
      h.incStat(RPG.ST_AG, RPG.r(0));
      h.incStat(RPG.ST_TG, RPG.r(0));
      h.incStat(RPG.ST_IN, RPG.r(6));
      h.incStat(RPG.ST_WP, RPG.r(5));
      h.incStat(RPG.ST_CH, RPG.r(4));
      h.incStat(RPG.ST_CR, RPG.r(8));
      h.incStat(Skill.ALCHEMY, RPG.r(3));
      h.incStat(Skill.HERBLORE, RPG.r(2));
      h.incStat(Skill.IDENTIFY, RPG.d(2));
      h.incStat(Skill.LITERACY, RPG.d(4));
      h.incStat(Skill.RUNELORE, RPG.d(2));

      h.incStat("Luck", -10);

      {
        Thing n = Lib.create("scroll of Teleport Self");
        Item.identify(n);
        h.addThing(n);
      }

      {
        Thing n = Lib.createType("IsWeaponRunestone", RPG.d(17));
        Item.identify(n);
        h.addThing(n);
      }

      for (int i = RPG.d(6); i > 0; i--) {
        Thing n = Lib.createType("IsRunestone", RPG.d(10));
        Item.identify(n);
        h.addThing(n);
      }

      for (int i = RPG.r(3); i > 0; i--) {
        Thing n = Lib.createType("IsRuneRecipeScroll", RPG.d(10));
        Item.identify(n);
        h.addThing(n);
      }

    } else if (p.equals("priest")) {
      h.set("Image", 11);

      h.incStat(RPG.ST_SK, RPG.r(0));
      h.incStat(RPG.ST_ST, RPG.r(0));
      h.incStat(RPG.ST_AG, RPG.r(0));
      h.incStat(RPG.ST_TG, RPG.r(3));
      h.incStat(RPG.ST_IN, RPG.r(4));
      h.incStat(RPG.ST_WP, RPG.r(8));
      h.incStat(RPG.ST_CH, RPG.r(5));
      h.incStat(RPG.ST_CR, RPG.r(0));

      h.incStat(Skill.PRAYER, RPG.d(2));
      h.incStat(Skill.LITERACY, RPG.d(2));
      h.incStat(Skill.HOLYMAGIC, RPG.d(2));
      h.incStat(Skill.HEALING, RPG.r(3));
      h.incStat(Skill.MEDITATION, RPG.r(2));
      h.incStat(Skill.FOCUS, RPG.r(2));
      h.incStat("Luck", 5);

      h.addThing(Spell.randomSpell(Skill.HOLYMAGIC, 5));

      Thing n = Lib.create("potion of healing");
      Item.identify(n);
      h.addThing(n);

    } else if (p.equals("healer")) {
      h.set("Image", 11);

      h.incStat(RPG.ST_SK, RPG.r(0));
      h.incStat(RPG.ST_ST, RPG.r(0));
      h.incStat(RPG.ST_AG, RPG.r(0));
      h.incStat(RPG.ST_TG, RPG.r(3));
      h.incStat(RPG.ST_IN, RPG.r(4));
      h.incStat(RPG.ST_WP, RPG.r(4));
      h.incStat(RPG.ST_CH, RPG.r(5));
      h.incStat(RPG.ST_CR, RPG.r(4));

      h.incStat(Skill.IDENTIFY, RPG.d(2));
      h.incStat(Skill.LITERACY, RPG.d(2));
      h.incStat(Skill.HEALING, RPG.d(3));
      h.incStat(Skill.HERBLORE, RPG.d(2));
      h.incStat(Skill.MEDITATION, RPG.r(2));
      h.incStat(Skill.FOCUS, RPG.r(2));
      h.incStat("Luck", 15);

      Thing n = Lib.create("potion of healing");
      Item.identify(n);
      h.addThing(n);
      h.addThing(Lib.create("potion of healing"));
      h.addThing(Lib.create("potion of healing"));
      h.addThing(Lib.createType("IsHerb", RPG.d(10)));
      h.addThing(Lib.createType("IsHerb", RPG.d(10)));
      h.addThing(Lib.createType("IsHerb", RPG.d(10)));
      h.addThing(Lib.createType("IsHerb", RPG.d(10)));
      h.addThing(Lib.createType("IsHerb", RPG.d(10)));

    } else if (p.equals("bard")) {
      h.set("Image", 7);

      h.incStat(RPG.ST_SK, RPG.r(3));
      h.incStat(RPG.ST_ST, RPG.r(0));
      h.incStat(RPG.ST_AG, RPG.r(3));
      h.incStat(RPG.ST_TG, RPG.r(0));
      h.incStat(RPG.ST_IN, RPG.r(3));
      h.incStat(RPG.ST_WP, RPG.r(3));
      h.incStat(RPG.ST_CH, RPG.r(6));
      h.incStat(RPG.ST_CR, RPG.r(6));

      h.incStat(Skill.MUSIC, RPG.po(0.5));
      h.incStat(Skill.PERCEPTION, 1);
      h.incStat(Skill.SLEIGHT, RPG.po(0.5));
      h.incStat(Skill.STORYTELLING, RPG.po(0.5));
      h.incStat(Skill.SEDUCTION, RPG.po(1.2));
      h.incStat(Skill.LITERACY, RPG.po(0.8));
      h.incStat("Luck", 20);

      Thing n = Lib.createType("IsRing", 5);
      Item.identify(n);
      h.addThing(n);

    } else if (p.equals("paladin")) {
      h.set("Image", 7);

      h.incStat(RPG.ST_SK, RPG.r(4));
      h.incStat(RPG.ST_ST, RPG.r(4));
      h.incStat(RPG.ST_AG, RPG.r(0));
      h.incStat(RPG.ST_TG, RPG.r(4));
      h.incStat(RPG.ST_IN, RPG.r(4));
      h.incStat(RPG.ST_WP, RPG.r(4));
      h.incStat(RPG.ST_CH, RPG.r(0));
      h.incStat(RPG.ST_CR, RPG.r(0));

      h.incStat(Skill.PRAYER, RPG.d(2));
      h.incStat(Skill.ATTACK, RPG.r(2));
      h.incStat(Skill.DEFENCE, RPG.r(2));
      h.incStat(Skill.BRAVERY, RPG.d(3));

      h.addThing(Weapon.createWeapon(RPG.d(4)));
      Thing n = Lib.createType("IsWand", RPG.d(4));
      Item.identify(n);
      h.addThing(n);

    } else if (p.equals("barbarian")) {
      h.set("Image", 3);

      h.incStat(RPG.ST_SK, RPG.r(3));
      h.incStat(RPG.ST_ST, RPG.r(3));
      h.incStat(RPG.ST_AG, RPG.r(5));
      h.incStat(RPG.ST_TG, RPG.r(5));
      h.incStat(RPG.ST_IN, RPG.r(0));
      h.incStat(RPG.ST_WP, RPG.r(0));
      h.incStat(RPG.ST_CH, RPG.r(0));
      h.incStat(RPG.ST_CR, RPG.r(0));
      h.incStat(RPG.ST_ATTACKSPEED, 10);

      h.incStat(Skill.ATTACK, RPG.r(2));
      h.incStat(Skill.FEROCITY, 1);
      h.incStat(Skill.ATHLETICS, 1);
      h.incStat(Skill.ALERTNESS, RPG.r(3));
      h.incStat(Skill.SURVIVAL, RPG.d(2));
      h.incStat(Skill.PICKPOCKET, RPG.r(2));
      h.incStat(Skill.UNARMED, 1);
      h.incStat(Skill.TRACKING, RPG.r(2));

      Thing n = Lib.create("potion of speed");
      Item.identify(n);
      h.addThing(n);

    } else if (p.equals("thief")) {
      h.set("Image", 10);

      h.incStat(RPG.ST_SK, RPG.r(5));
      h.incStat(RPG.ST_ST, RPG.r(0));
      h.incStat(RPG.ST_AG, RPG.r(6));
      h.incStat(RPG.ST_TG, RPG.r(0));
      h.incStat(RPG.ST_IN, RPG.r(0));
      h.incStat(RPG.ST_WP, RPG.r(0));
      h.incStat(RPG.ST_CH, RPG.r(4));
      h.incStat(RPG.ST_CR, RPG.r(3));
      h.incStat(RPG.ST_ATTACKSPEED, 120);

      h.incStat(Skill.ALERTNESS, RPG.d(3));
      h.incStat(Skill.PICKPOCKET, RPG.r(3));
      h.incStat(Skill.PICKLOCK, RPG.r(3));
      h.incStat(Skill.DISARM, RPG.r(2));

      Thing n = Lib.create("wand of Teleport Self");
      Item.identify(n);
      h.addThing(n);

    } else if (p.equals("ranger")) {
      h.set("Image", 10);

      h.incStat(RPG.ST_SK, RPG.r(8));
      h.incStat(RPG.ST_ST, RPG.r(3));
      h.incStat(RPG.ST_AG, RPG.r(6));
      h.incStat(RPG.ST_TG, RPG.r(0));
      h.incStat(RPG.ST_IN, RPG.r(0));
      h.incStat(RPG.ST_WP, RPG.r(0));
      h.incStat(RPG.ST_CH, RPG.r(4));
      h.incStat(RPG.ST_CR, RPG.r(0));

      h.incStat(Skill.ARCHERY, RPG.r(3));
      h.incStat(Skill.THROWING, RPG.r(3));
      h.incStat(Skill.SURVIVAL, RPG.d(1));
      h.incStat(Skill.SWIMMING, RPG.r(2));
      h.incStat(Skill.RIDING, RPG.r(2));
      h.incStat(Skill.TRACKING, RPG.d(3));

      Thing n = Lib.create("healing potion");
      h.addThing(n);

    } else if (p.equals("farmer")) {
      h.set("Image", 10);

      h.incStat(RPG.ST_SK, RPG.r(0));
      h.incStat(RPG.ST_ST, RPG.r(4));
      h.incStat(RPG.ST_AG, RPG.r(0));
      h.incStat(RPG.ST_TG, RPG.r(4));
      h.incStat(RPG.ST_IN, RPG.r(0));
      h.incStat(RPG.ST_WP, RPG.r(6));
      h.incStat(RPG.ST_CH, RPG.r(4));
      h.incStat(RPG.ST_CR, RPG.r(6));

      h.incStat(Skill.THROWING, RPG.r(3));
      h.incStat(Skill.SURVIVAL, RPG.r(3));
      h.incStat(Skill.SWIMMING, RPG.r(2));
      h.incStat(Skill.COOKING, RPG.r(3));
      h.incStat(Skill.HERBLORE, RPG.d(2));

      // a healing potion
      Thing n = Lib.create("potion of healing");
      Item.identify(n);
      h.addThing(n);
    } else {
      throw new Error("Profession [" + p + "] not recognised");
    }
  }
Example #17
0
  public static Thing createBaseHero(String race) {
    Thing h = Lib.extend("you", race);
    h.set("IsHero", 1);
    h.set("Gods", Lib.instance().getObject("Gods"));

    h.set("IsGiftReceiver", 0); // don't count as gift receiver
    h.set("Image", 7);
    h.set("Z", Thing.Z_MOBILE + 5);
    h.set(RPG.ST_RECHARGE, 60);
    h.set(RPG.ST_REGENERATE, 20);
    h.set("HungerThreshold", 300000);
    h.set("NameType", Description.NAMETYPE_PROPER);
    h.set("OnAction", new HeroAction());
    h.set("Seed", RPG.r(1000000000));
    h.set("ASCII", "@");
    h.set("IsDisplaceable", 0);

    // initial fate points
    h.incStat(RPG.ST_FATE, 1);

    // Starting Game stats
    h.set(RPG.ST_LEVEL, 1);
    h.incStat(RPG.ST_SKILLPOINTS, 1);

    // dummy map
    Map m = new Map(1, 1);
    m.addThing(h, 0, 0);

    return h;
  }
Example #18
0
 public static Thing createMeetQuest(String desc, Thing target) {
   Thing t = Lib.create("meet quest");
   t.set("Target", target);
   t.set("Description", desc);
   return t;
 }
Example #19
0
 public Thing create(int damage) {
   Thing t = Lib.create("poison");
   t.set("Damage", damage);
   return t;
 }