System

Battle

戦闘中に使う計算式を説明をします。

行動順
攻撃命中率
// 行動順を決定する1〜10までの値を取得します。 // この値が低いほど、先に行動できます。 function getActionOrder(agi) Number { // すばやさが 0 の場合 Enemy と判断し、その場合はランダムで値を決めます if (agi == 0) { return 1 + Dice::Cast(1, 8); } int agiBonus = 3; if (agi >= 15) agiBonus = 14 - agi; else if (agi >= 8) agiBonus = 0; else if (agi >= 6) agiBonus = 1; else if (agi >= 4) agiBonus = 2; int order = Dice::Cast(1, 10) + agiBonus; if (order < 1) order = 1; if (order > 10) order = 10; return order; }
function getFightLevel(Level, STR, WeaponSTR) Number { // ちからが 0 の場合は Enemy と判断して、レベルを使います。 if (STR == 0) return Level; int strBonus = 0; if (str > 15) strBonus = str - 15; else if (str < 6) strBonus = str - 6; int levelBonus = Level/3; return strBonus + levelBonus + WeaponSTR; } function getHitRate(targetAC, targetGroupNo, targetIsMovable, Level, STR, WeaponSTR) Number { // 命中率 = 5 * (AC + A - (3 * グループ番号)) int A= getFightLevel(Level, STR, WeaponSTR); int hitRate = 10 + targetAC + A - (3 * targetGroupNo); hitRate *= 5; if (targetIsMovable == false) hitRate += 20; if (hitRate > 95) hitRate = 95; if (hitRate < 5) hitRate = 5; return hitRate; }

Level UP

レベルアップ時の HP 変化
レベルアップ時の MP 変化
レベルアップ時の能力値の変化
// 25% の確率で変化しません Dice::Cast(個数, 面数) if (Dice::Cast(1, 4) == 4) return; int value = 1; // 以下の条件が真の場合、能力値が下がる、または変わらないのどちらかになります。 if (Dice::Cast(1, 130) < age) { // 能力値が18以上の場合 5/6 の確率で変化しません。 if (ability >= 18) { if (Dice::Cast(1, 6) < 6) return; } // 3 未満の場合も変化しません。 if (ability < 3) return; value = -1; } // 能力値が、種族の基本能力値 + 10 以上になる場合も変化しません。 if (ability + value >= baseAbility + 10) return; ability = ability + value;
function levelUpHP(character: PartyCharacter): int { var VIT = character.getVitality(); var classData = character.getClass(); var bonus = 0; if (VIT <= 3) bonus --; if (VIT <= 5) bonus --; f (VIT > 15) bonus = VIT - 15; // Database > Class で設定した値 LevelUpHP int n = classData.getLevelUpHP(); // レベル 10 で 体力が 15 で LevelUpHP が 8 の場合 // 最大値HP は 10D23 つまり 23〜230が設定されます。 var hp = Dice::Cast(getLevel(), n + bonus ); var maxHP = character.getMaxHP(); // 現在の 最大HP が上の結果より大きい場合 // レベルアップで上がる HP は 1 になります。 if (maxHP >= hp) { return maxHP + 1; } return hp; }
function levelUpMP(character: PartyCharacter): void { // 1. 種類とランク別に現在覚えている魔法の数を数える。タイプ 0 は黒魔法 1 は白魔法 var skillCnt[2][8]; for (var i = 0; i < character.getLearningSkillCount(); ++i) { var skill = character.getLearningSkillAt(i); var type = skill.getType(); var rank = skill.getRank(); skillCnt[type][rank] += 1; } // 2. キャラクターの現在の Level と Class と 1 を元に、現在の最大 MP を計算する var classID = character.getClassID(); var characterLevel = character.getLevel(); var classData = CharClassList.getAt(classID); for (var rank = 1; rank < 8; ++rank) { for (var type = 0; type < 2; ++type) { // データベースに指定のランクが登録されていない場合は // これ以上処理しないでタイプを切り替える if (skillCnt[type][rank] == 0) continue; // Database > Class で設定した覚えるスキルの表から // ループで使うためにクラス別の覚えるスキルの数を取得 // 次のループで指定ランクのスキルを覚える最初のレベルを取得 // 例 ファイアとスリープのランクが 1 で、覚えるレベルが 1 と 2 の場合 // learningLevel つまりスキルを覚える最初のレベルは 1 になります。 var learningSkillCount = classData.getLernningSkillCount(); var learningLevel = 0; for (var i = 0; i < learningSkillCount; ++i) { var id = classData.getLearningSkillIDAt(i); var skill = CharSkillList.getAt(id); if (skill.getRank() == rank) { var lv = classData.getLearningSkillLevelAt(i); if (learningLevel == 0) learningLevel = lv; else learningLevel = Math.min(learningLevel, lv); } } // 現在のレベルで設定されうる MP // 上の例で現在レベル 5 の場合は // 5 - 1 + 1 = 5 つまり MP = 5 になります。  var mpLevel = characterLevel - learningLevel + 1; // 設定する現在の MP の最大値。 9 以上にはなりません。 var maxMP = Math.max(mpLevel, skillCnt[type][rank]); // 現在のクラスがそのランクのスキルを覚えない場合は // 現在のキャラクターが覚えているスキルの数が MP になります if (learningLevel <= 0) maxMP = skillCnt[type][rank]; if (maxMP > 9) maxMP = 9; // キャラクターに 最大MP をセットする character.setMaxMPAt(rank, type, maxMP); } } }

素材の規格

Graphics
画像は bmp, png, gif, jpeg 形式に対応しています。
画像に透過色が設定されていない場合、画像左上のピクセルが透過色として使用されます。

MIDI
コントロールチェンジ 111 番を基点にループ再生をすることができます。