2013/06/15
■ [変愚蛮怒/開発]パッチを解読してみる・機能:ランダムユニークモンスター
今回は個人的にビンビン感じまくるランダムユニークモンスターパッチの検証をば。これとは別にエゴモンスターパッチなるものもあるが、どうもリンク切れ起こしてる可能性が微レ存か。
なお今回、かなりいい加減にパッチファイルを切り取りコピペ整理しているので、パッチ場所指定記述が大分おかしくなっている所がある多い。ご了承を。
モンスター種族IDの設定方法
ランダムユニークは m_ptr->ego_race ポインタの参照先 にユニークモンスター種族情報の参照先を保管し、必要に応じてr_ptrの参照先を切り替えて実装を行っているらしい。100近い場所が以下の形に置換されている。
- r_ptr = &r_info[m_ptr->r_idx]; + r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx];
セーブデータ上に情報追加
diff -u -rN hengband/src/defines.h hengband-ego/src/defines.h --- hengband/src/defines.h 2007-02-04 21:24:20.620307200 +0900 +++ hengband-ego/src/defines.h 2007-02-04 21:24:25.056686400 +0900 @@ -5357,6 +5357,8 @@ #define SAVE_MON_MFLAG2 0x00002000 #define SAVE_MON_NICKNAME 0x00004000 #define SAVE_MON_PARENT 0x00008000 +// EGOMON +#define SAVE_MON_EGO 0x00010000 diff -u -rN hengband/src/load.c hengband-ego/src/load.c --- hengband/src/load.c 2007-02-04 21:24:21.511588800 +0900 +++ hengband-ego/src/load.c 2007-02-04 21:24:25.967996800 +0900 @@ -903,6 +903,27 @@ if (flags & SAVE_MON_PARENT) rd_s16b(&m_ptr->parent_m_idx); else m_ptr->parent_m_idx = 0; + + // EGOMON + if (flags & SAVE_MON_EGO) { + m_ptr->ego_race = RNEW(monster_race); + memcpy(m_ptr->ego_race,&r_info[m_ptr->r_idx],sizeof(monster_race)); + // + rd_s16b(&m_ptr->ego_race->ac); + rd_s32b(&m_ptr->ego_race->mexp); + rd_byte(&m_ptr->ego_race->freq_spell); + rd_u32b(&m_ptr->ego_race->flags1); + rd_u32b(&m_ptr->ego_race->flags2); + rd_u32b(&m_ptr->ego_race->flags3); + rd_u32b(&m_ptr->ego_race->flags4); + rd_u32b(&m_ptr->ego_race->flags5); + rd_u32b(&m_ptr->ego_race->flags6); + rd_u32b(&m_ptr->ego_race->flags7); + rd_u32b(&m_ptr->ego_race->flags8); + rd_u32b(&m_ptr->ego_race->flags9); + rd_u32b(&m_ptr->ego_race->flagsr); + } + else m_ptr->ego_race = NULL; }
@@ -262,6 +263,22 @@ if (flags & SAVE_MON_MFLAG2) wr_byte(m_ptr->mflag2); if (flags & SAVE_MON_NICKNAME) wr_string(quark_str(m_ptr->nickname)); if (flags & SAVE_MON_PARENT) wr_s16b(m_ptr->parent_m_idx); + // EGOMON + if (flags & SAVE_MON_EGO){ + wr_s16b(m_ptr->ego_race->ac); + wr_s32b(m_ptr->ego_race->mexp); + wr_byte(m_ptr->ego_race->freq_spell); + wr_u32b(m_ptr->ego_race->flags1); + wr_u32b(m_ptr->ego_race->flags2); + wr_u32b(m_ptr->ego_race->flags3); + wr_u32b(m_ptr->ego_race->flags4); + wr_u32b(m_ptr->ego_race->flags5); + wr_u32b(m_ptr->ego_race->flags6); + wr_u32b(m_ptr->ego_race->flags7); + wr_u32b(m_ptr->ego_race->flags8); + wr_u32b(m_ptr->ego_race->flags9); + wr_u32b(m_ptr->ego_race->flagsr); + } }
@@ -204,6 +203,8 @@ if (m_ptr->mflag2) flags |= SAVE_MON_MFLAG2; if (m_ptr->nickname) flags |= SAVE_MON_NICKNAME; if (m_ptr->parent_m_idx) flags |= SAVE_MON_PARENT; + // EGOMON + if (m_ptr->ego_race) flags |= SAVE_MON_EGO; /*** Monster save flags ***/ wr_u32b(flags);
構造体に型追加
diff -u -rN hengband/src/types.h hengband-ego/src/types.h --- hengband/src/types.h 2007-02-04 21:24:23.544512000 +0900 +++ hengband-ego/src/types.h 2007-02-04 21:24:28.050992000 +0900 @@ -610,6 +610,8 @@ u32b smart; /* Field for "smart_learn" */ s16b parent_m_idx; + // EGOMON + monster_race* ego_race; };
ユニークモンスターとしての強化処理
こういうのご飯三杯いける。
@@ -3142,6 +3142,150 @@ /* Get a new monster record */ m_ptr = &m_list[c_ptr->m_idx]; + // EGOMON + if(one_in_(333)){ + m_ptr->ego_race = RNEW(monster_race); + memcpy(m_ptr->ego_race,r_ptr,sizeof(monster_race)); + m_ptr->ego_race->ac = m_ptr->ego_race->ac * rand_range(100,150) / 100; + m_ptr->ego_race->mexp = m_ptr->ego_race->mexp * rand_range(150,200) / 100; + m_ptr->ego_race->flags1 |= RF1_DROP_GOOD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags1 |= RF1_DROP_GREAT; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_STUPID; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_SMART; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_CAN_SPEAK; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_REFLECTING; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_EMPTY_MIND; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_WEIRD_MIND; + m_ptr->ego_race->flags2 &= ~RF2_MULTIPLY; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_REGENERATE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_AURA_FIRE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_AURA_ELEC; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_OPEN_DOOR; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_BASH_DOOR; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_PASS_WALL; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_KILL_WALL; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_MOVE_BODY; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_KILL_BODY; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_TAKE_ITEM; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_KILL_ITEM; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_GOOD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_AURA_COLD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_NO_FEAR; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_NO_STUN; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_NO_CONF; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_NO_SLEEP; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_SHRIEK; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_DISPEL; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_ROCKET; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_SHOOT; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_ACID; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_ELEC; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_FIRE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_COLD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_POIS; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_NETH; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_LITE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_DARK; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_CONF; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_SOUN; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_CHAO; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_DISE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_NEXU; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_TIME; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_INER; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_GRAV; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_SHAR; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_PLAS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BA_NUKE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_NUKE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BA_CHAO; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_DISI; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_ACID; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_ELEC; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_FIRE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_COLD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_POIS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_NETH; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_WATE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_MANA; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_DARK; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_DRAIN_MANA; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_MIND_BLAST; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BRAIN_SMASH; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CAUSE_1; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CAUSE_2; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CAUSE_3; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CAUSE_4; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_ACID; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_ELEC; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_FIRE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_COLD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_LITE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_NETH; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_WATE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_MANA; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_PLAS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_ICEE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_MISSILE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_SCARE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BLIND; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CONF; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_SLOW; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_HOLD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_HASTE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_HAND_DOOM; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_HEAL; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_INVULNER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_BLINK; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TPORT; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_WORLD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TELE_TO; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TELE_AWAY; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TELE_LEVEL; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_PSY_SPEAR; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_DARKNESS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TRAPS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_FORGET; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_RAISE_DEAD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_KIN; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_CYBER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_MONSTER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_MONSTERS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_ANT; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_SPIDER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_HOUND; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_HYDRA; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_ANGEL; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_DEMON; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_UNDEAD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_DRAGON; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_HI_UNDEAD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_HI_DRAGON; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_AMBERITES; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_UNIQUE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_ACID; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_ELEC; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_FIRE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_COLD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_POIS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_LITE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_DARK; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_NETH; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_WATE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_PLAS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_SHAR; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_SOUN; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_CHAO; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_NEXU; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_DISE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_WALL; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_INER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_TIME; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_GRAV; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_ALL; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_TELE; + } + /* Save the race */ m_ptr->r_idx = r_idx; m_ptr->ap_r_idx = initial_r_appearance(r_idx);
ユニークとしての独自名追加
@@ -3183,6 +3327,12 @@ reset_target(m_ptr); m_ptr->nickname = 0; + // EGOMON + if(m_ptr->ego_race){ + char buffer[16]; + get_table_name_aux(buffer); + m_ptr->nickname = quark_add(buffer); + } m_ptr->exp = 0;
HP強化
単純に3/2倍になる模様。
@@ -3250,6 +3400,10 @@ { m_ptr->max_maxhp = damroll(r_ptr->hdice, r_ptr->hside); }
+ // EGOMON + if(m_ptr->ego_race){ + m_ptr->max_maxhp = m_ptr->max_maxhp * 3 / 2; + } /* Monsters have double hitpoints in Nightmare mode */ if (ironman_nightmare)
加速強化
+0が内部で110と扱われている中で5/4倍はやばいですよ!先輩!
序盤の@こわれちゃーう。
@@ -3269,6 +3423,11 @@ /* Extract the monster base speed */ m_ptr->mspeed = get_mspeed(r_ptr); + // EGOMON + if(m_ptr->ego_race){ + m_ptr->mspeed = m_ptr->mspeed * 5 / 4; + if(m_ptr->mspeed > 199) m_ptr->mspeed = 199; + } if (mode & PM_HASTE) (void)set_monster_fast(c_ptr->m_idx, 100);
■ [D'angband/開発]D'angband開発日誌 part42…アイテム生成処理の再実装(2)
辺土SATSUGAI流開祖『フナヒヤンダ』
デバッグ機能の高級品生成機能中の出来事か。 安っぽい大鉄杖だなあ。
兵器の悪魔『ウディンダイ』
我等が盟主の黒き槍に並ぶ一品が、悲しいなぁ。 INSTA_ARTや階層による生成率がまともに働いておらん模様。
辺土SATSUGAI流開祖『フナヒヤンダ』
そもそも元の変愚じゃこの辺のカスエゴは整理されたんだろ、 D'angじゃどうする気なんだろうな。
兵器の悪魔『ウディンダイ』
仕様そのものが変わっているし、 独自の調整がかかるんじゃないかな。一応案はあるらしい。
兵器の悪魔『ウディンダイ』
とりあえず、表記の符号表示が足りなかったり、 何故か高級品だと無条件にto ACがつく不具合を修正したと思いきや…
辺土SATSUGAI流開祖『フナヒヤンダ』
今度は魔法的修正がつかんよ~頼むよ~
兵器の悪魔『ウディンダイ』
ま、こんなところかな。
辺土SATSUGAI流開祖『フナヒヤンダ』
そもそも変愚と比べて、ACに余計なパラメータが二種類加わってることの 説明はどうするんだよ。EVとかVOとか察しができる人やこれまでの 中の奴のツイート気長に見てきた人しか理解できまい。
兵器の悪魔『ウディンダイ』
次回からそこを調整がてら説明しようか。
■ [ヴィーヤウトゥムノ] [U] ドリードロード『ツエラクス』/Tselakus, the Dreadlord (L.Red 'G')
=== Num:792 Lev:68 Rar:2 Spd:+20 Hp:6500 Ac:150 Exp:35000 この存在自体が侮辱的な人間は、辺りの空間の構造をゆがめて引き裂いている。 強力な魔法の熟練者であるツエラクスは、冒険者の柔らかい肉に飢えている。ツ エラクスの持つ暗闇を発する松明が通った後には、死と破壊の痕跡しか残されな い。ツエラクスは常に軽蔑的な冷笑を絶やさず、彼を倒そうとする冒険者の哀れ な努力をせせら笑っている。強力な爪で現実を引き裂き、通り道にあるもの全て を消滅させながら、冒険者の魂に向かってくる。 彼は通常地下 68 階で出現し、非常に素早く動いている。この邪悪なるアンデッ ドのモンスターを倒すことは 50 レベルのキャラクタにとって 約45769.23 ポイ ントの経験となる。彼は氷に包まれている。彼は魔法を使うことができ、地獄 球、暗黒の嵐、目くらまし、混乱、麻痺、救援召喚、強力なアンデッド召喚、ア ンバーの王族召喚の呪文を唱えることがある(確率:1/3)。彼は AC150 の防御力と 6500 の体力がある。彼はダンジョンを暗くし、壁をすり抜けることができる。彼 は透明で目に見えない。彼は冷血動物である。彼は冷気と毒と地獄の耐性を持っ ている。彼は混乱しないし、眠らされない。彼は侵入者を幾分注意深く見ており、 200 フィート先から侵入者に気付くことがある。彼は 14 個までの上質なアイテ ムを持っていることがある。彼は 10d10 のダメージで殴って攻撃し、 10d10 の ダメージで殴って攻撃し、 4d6 のダメージで殴って腕力を減少させ、 4d6 のダ メージで殴って腕力を減少させる。
辺土SATSUGAI流開祖『フナヒヤンダ』
おうアンバー呼ぶなや!
兵器の悪魔『ウディンダイ』
ヴァニラの頃はナズグル召喚だったんだよねえ…あっ…(察し)