見出し画像

Elona改造講座 第13回(MMAhにSESTジュア移植・未実装称号追加)

Elona改造講座、第13回です。今回は前回の復習と続きになります。
前回はSESTイツパロトルを追加しましたが、同じ要領でSESTジュアも追加しましょう。それに加えてSESTイツパロトルとSESTジュア撃破時の称号をSESTから移植しましょう。


①復習:SESTジュアのキャラ定義の移植

まずは前回の復習から。SESTイツパロトルと同じ要領でSESTジュア(ID:366 画像ID:402)のキャラ定義をMMAhに移植してみましょう。SESTは変数名が復元されないのでooと比較するなどして元の変数名を類推します。下のようになれば成功です。
※キャラ画像はAAジュア(ID:2502 画像ID:402)と共通なので、前回のような競合の心配はありません。

// キャラID:366 《癒しのジュア》(ID:366 画像ID:402)  ※SESTの追加キャラ
// 怒りの救世主(技能ID:900)はSEST独自技能の為コメントアウト
if ( dbid == 366 ) {
	if ( dbmode == 16 ) {
		if ( dbspec == 3 ) {
			return 6
		}
		if ( dbspec == 5 ) {
			return 0
		}
		if ( dbspec == 6 ) {
			return 100
		}
		if ( dbspec == 2 ) {
			return "" + lang("《癒しのジュア》", "<Jure>")
		}
		//if ( dbspec == 10 ) {
		//	return cobjlvorg(356)
		//}
		if ( dbspec == 8 ) {
			return "" + "/god/"
		}
		return 0
	}
	if ( dbmode == 2 ) {
		dbidn = "god"
		dbmode = 2
		gosub *label_1116
		cpicref = 402
		return
	}
	if ( dbmode == 3 ) {
		cdata(27, rc) = 366
		if ( initlv != 0 ) {
			cdata(38, rc) = initlv
		}
		else {
			cdata(38, rc) = limitmax(350, cfg_mmah_maxlevel)
		}
		if ( voidlv != 0 ) {
			cdata(38, rc) = limit(voidlv * (50 + cdata(38, rc)) / 50, 1, cfg_mmah_maxlevel)
		}
		cdata(13, rc) = -1
		cdata(202, rc) = 1
		cdata(207, rc) = 100
		cdata(208, rc) = 1
		cdata(209, rc) = 10
		creaturepack = 0
		cdata(215, rc) = -1
		//cdata(220, rc) = 900 // 怒りの救世主
		cdata(211, rc) = 403 // ジュアの癒し
		cdata(212, rc) = 11
		cdatan(0, rc) = lang("《癒しのジュア》", "<Jure>")
		cdata(9, rc) = 0
		cdata(69, rc) = 0
		dbidn = "god"
		dbmode = 3
		gosub *label_1116
		dbidn = "priest"
		dbmode = 3
		gosub *label_1117
		cdata(8, rc) = 1
		cdata(7, rc) = 402
		fixlv = 6
		cspecialeq = 1
		return
	}
	if ( dbmode == 4 ) {
		if ( nospartifact == 0 ) {
			eqweapon1 = 677 // ホーリーランス
		}
		eqtwohand = 1
		return
	}
	return 0
}

上記キャラ定義は凄腕の黒天使(ID:365)の下に追加しましょう。こんな感じになればOKです。

SESTジュアのキャラ定義を追加しました

続いて降臨処理を追加します。条件式は本来は「inputlog == "ジュア" | inputlog == "jure"」だけでいいのですが、これより上にAAジュアの降臨処理があるとそちらが優先されてしまう為、OR条件で「inputlog == "SESTジュア" | inputlog == "sest jure"」も条件に追加しておきます。
あと行動ルーチンを「眷属召喚」なる技能で上書きする処理がありますが、これはSEST独自技能のようなのでコメントアウトしておきました。

if ( inputlog == "ジュア" | inputlog == "jure" | inputlog == "SESTジュア" | inputlog == "sest jure" ) {
	txt_select -1, lang("「ね、ねぇ!あなたが私を呼んだの?」", cnvtalk("I-I'm not coming down there just because you called me, stupid...!")), "", "", "", "", "", "", "", ""
	flt
	characreate -1, 366, cdata(1, 0), cdata(2, 0)
	//cdata(211, rc) = 907 // 回復行動を眷属召喚に変更(SEST独自技能の為コメントアウト)
	throwsstpevent "AdventGod", rc, inputlog, 0
	adventothergod "jure"
	return
}

SESTジュアの降臨処理はこんな感じになりました。

SESTジュアの降臨処理を追加しました
(条件部を増やしてます)

「SESTジュア」で願って降臨できれば成功です!
……ってこれだけだと降臨時の台詞はともかく、外見ではAAジュアと見分けがつきませんね。通常のホーリーランスを持ってる方がSESTジュア、オリジナルホーリーランスを持ってる方がAAジュアです。

SESTジュアが降臨できました!
(外見は同じですがAAジュアとは別キャラです)

②イツパロトル撃破称号の獲得

ここから今回の本題。称号の追加に入ります。
 
イツパロトル撃破時、称号No.14を獲得する処理を追加します。称号の獲得状態は ogdata(440 + 称号No) で管理されているので、撃破時にこの変数を2にします。
※称号の獲得状態は 0:未取得 1:取得済だがOFF 2:取得済かつON となっています。
「npcmemory(0, 306)」で検索すると称号No.13(ルルウィ撃破称号 ogdata(453))の獲得処理が見つかるはずです。その下に以下の処理を追加してください。これは「イツパロトル(ID:367)の撃破数が0でない時、称号No.14が未取得なら、取得済かつONにする」という意味になります。

// 独自拡張 称号の獲得(14:エレメンタルマスター)  ※SEST追加称号の移植
if ( npcmemory(0, 367) != 0 ) {
	if ( ogdata(454) == 0 ) {
		f = 1
		ogdata(454) = 2
	}
}

画像のようになれば成功です。これでイツパロトル撃破時に称号が獲得されます。

称号No.14の獲得処理を追加しました

同じ要領でジュア撃破時の称号(称号No.18)をSESTジュア撃破時にも獲得できるようにしましょう。「npcmemory(0, 331)」で検索すると称号No.17(エヘカトル撃破称号 ogdata(457))の獲得処理が見つかるはずです。その下に以下の処理を追加してください。ついでに全神撃破称号(称号No.20)の獲得処理も追加しておきます。こちらの獲得条件は「他の神の撃破称号を全て獲得済の場合」になります。

// 独自拡張 称号の獲得(18:リストラ)  ※SEST追加称号の移植
if ( npcmemory(0, 366) != 0 ) {
	if ( ogdata(458) == 0 ) {
		f = 1
		ogdata(458) = 2
	}
}

<中略(エヘカトル撃破称号)>

// 独自拡張 称号の獲得(20:神々の黄昏)  ※SEST追加称号の移植
if ( ogdata(452) != 0 & ogdata(453) != 0 & ogdata(454) != 0 & ogdata(455) != 0 & ogdata(456) != 0 & ogdata(457) != 0 & ogdata(458) != 0 & ogdata(459) != 0 ) {
	if ( ogdata(460) == 0 ) {
		f = 1
		ogdata(460) = 2
	}
}

こんな感じになればOKです。称号No.18とNo.20の獲得処理が新規追加分です。

称号No.18とNo.20の獲得処理を追加しました

※ここで「AAジュア撃破時には称号は手に入らないの?」と疑問に思う人もいることでしょう。実はAAジュア撃破時の称号獲得処理はMMAhにデフォルトで入っているのですが、その処理のみ他の称号とは別の場所に獲得処理が書かれています。「新しい称号を獲得した」で検索するとすぐに見つかることでしょう。

③称号名の追加

omake・MMA・MMAhでは一部称号は未実装になっています。これもSESTから移植しておきましょう。称号名は配列titlename、称号の効果説明は配列titlename2に格納されています。称号名を定義している箇所は適当な称号名("替え玉"や"寺生まれ"が良いでしょう)で検索するとすぐに見つかります。
 
まずは称号名の変更から。No.14(イツパロトル撃破)、No.18(ジュア撃破)、No.20(全神撃破)に名前を設定します。それぞれエレメンタルマスター、リストラ、神々の黄昏となります。

titlename(10) = "破壊兵器を破壊した" + _sex(cdata(8, 0)), "浄化者", "ジョン・コナー", "サディストキラー", "エレメンタルマスター", "収穫者", "地球割り", "うみみゃあ!", "リストラ", "中に誰もいませんよ"
titlename(20) = "神々の黄昏", "まさに善人", "カビキラー", "おうちかえす", "断末魔合唱団", "戦鬼", "13番目の" + _sex(cdata(8, 0)), "だいまどう", "无", "ワンマン・アーミー"

効果説明も変更します。

titlename2(10) = "ゼイレン究極破壊兵器『ウティマ』を撃破", "不浄なる者『アズラシズル』を撃破", "《機械のマニ》を撃破", "《風のルルウィ》を撃破", "《元素のイツパロトル》を撃破", "《収穫のクミロミ》を撃破", "《地のオパートス》を撃破", "《幸運のエヘカトル》を撃破", "《癒しのジュア》を撃破", "《エヘカトルの中の神》を撃破"
titlename2(20) = "全ての神を撃破", "無邪気な少女『グウェン』を100回殺害", "異形の森の使者『ロミアス』を100回殺害", "迷子の子猫を100回殺害", "吟遊詩人を100回殺害", "戦術スキルレベル100到達", "射撃スキル100到達", "詠唱、読書、暗記スキル合計300到達", "治癒、瞑想スキル合計200到達", "武器スキル合計300到達"

一応英語名の方も変更。

titlename(10) = "Destroyed Destructive Weapons", "The Purifier", "John Connor", "Sadist Killer", "Elemental Master", "Harvester", "Earth Splitter", "Mewmewmew!", "You're Fired!", "No one's inside"
titlename(20) = "Ragnarok", "Do Gooder", "Mold Killer", "Returning Home", "Wailing Choir", "God of War", "The 13th " + _sex(cdata(8, 0)), "Arch Mage", "Emptiness", "One Man Army"
<中略>
titlename2(10) = "Defeat <Utima> the destroyer of Xeren", "Defeat <Azzrssil> the impure", "Defeat Mani of Machine", "Defeat Lulwy of Wind", "Defeat Itzpalt of Element", "Defeat Kumiromi of Harvest", "Defeat Opatos of Earth", "Defeat Ehekatl of Luck", "Defeat Jure of Healing", "Defeat <God inside Ehekatl>"
titlename2(20) = "Defeat all 8 gods", "Kill <Gwen> the innocent 100 times", "Kill <Lomias> the messenger from Vindale 100 times", "Kill stray cat 100 times", "Kill Bard 100 times", "Reach 100 in Tactics", "Reach 100 in Marksman", "Reach 300 combined in casting, literacy, and memorization", "Reach 200 combined in healing and meditation", "Reach 300 combined in weapon skills"

画像のようになれば成功です。

未実装称号に名前と説明を設定しました

④動作確認

実際に称号を獲得してみましょう。「イツパロトル」と「SESTジュア」を願って降臨させてミンチにします。
神に勝てる程の強さが無い場合はF12のコンソールで「gain_spact」と入力して全技能を使えるようにして、うみみゃあ!を使いましょう。前回と今回で追加した神々はうみみゃあ!に耐性を持っていない為、これで倒せます。

イツパロトルをミンチにすることで称号が獲得できました!

⑤おまけ:他のヴァリアントからのキャラ定義の移植

前回と今回で説明した方法を使えば、キャラIDが重複していない限りは他のヴァリアントからも自由にキャラ定義を持ってくることができます。例えば以前「富のヤカテクト」を追加した時はo_creature.csvを編集しましたが、そんな面倒をする必要は無いわけですね。以下にPlusヤカテクト(ID:482 画像ID:495)をMMAhに移植する際の例を示します。
※Plus独自の技能とアイテムはコメントアウトしています。

// キャラID:482 《富のヤカテクト》(ID:482 画像ID:495)  ※Plusの追加キャラ
if ( dbid == 482 ) {
	if ( dbmode == 103 ) {
		if ( jp ) {
			txtef 9
			txt_select dbaatalk, "「ちょろいちょろい」", "「どやっ!」", "", "", "", "", "", "", ""
			return 1
		}
	}
	if ( dbmode == 104 ) {
		if ( jp ) {
			txtef 9
			txt_select dbaatalk, "「ご飯にするん?お風呂にするん?それとも、お・布・施?」", "", "", "", "", "", "", "", ""
			return 1
		}
	}
	if ( dbmode == 16 ) {
		if ( dbspec == 3 ) {
			return 6
		}
		if ( dbspec == 5 ) {
			return 0
		}
		if ( dbspec == 6 ) {
			return 5
		}
		if ( dbspec == 2 ) {
			return "" + lang("《富のヤカテクト》", "<Yacatect>")
		}
		if ( dbspec == 8 ) {
			return "" + "/god/"
		}
		return 0
	}
	if ( dbmode == 2 ) {
		dbidn = "god"
		dbmode = 2
		gosub *label_1116
		cpicref = 495
		cpicref += 0 * 1000
		return
	}
	if ( dbmode == 3 ) {
		cdata(27, rc) = 482
		if ( initlv != 0 ) {
			cdata(38, rc) = initlv
		}
		else {
			cdata(38, rc) = limitmax(350, cfg_mmah_maxlevel)
		}
		if ( voidlv != 0 ) {
			cdata(38, rc) = limit(voidlv * (50 + cdata(38, rc)) / 50, 1, cfg_mmah_maxlevel)
		}
		cdata(13, rc) = -1 // 59 // 顔グラ無し
		cdata(202, rc) = 1
		cdata(207, rc) = 75
		cdata(208, rc) = 2
		cdata(209, rc) = 10
		creaturepack = 0
		//cdata(215, rc) = -2, -2, -2, -2, 697 // 高速ラッシュ(Plus専用)
		//cdata(220, rc) = 738, 755 // ストラックアウト(Plus専用), シャイニングスロー(Plus専用)
		cdata(215, rc) = -2, -2, -2, -2, -1
		cdata(220, rc) = -1, -1
		cdata(212, rc) = 25
		cdata(23, rc) += 1
		cdatan(0, rc) = lang("《富のヤカテクト》", "<Yacatect>")
		cdata(9, rc) = 0
		cdata(69, rc) = 0
		cdata(40, rc) = -10000
		dbidn = "god"
		dbmode = 3
		gosub *label_1116
		dbidn = "predator"
		dbmode = 3
		gosub *label_1117
		cdata(8, rc) = 1
		cdata(7, rc) = 495
		cdata(7, rc) += 0 * 1000
		fixlv = 6
		cspecialeq = 1
		return
	}
	if ( dbmode == 4 ) {
		//eqrange = 796 // 寛永通宝(Plus専用)
		return
	}
	return 0
}

こちらは中の神(ハイパー・ヤカテクト)のキャラ定義になります。まぁエヘカトル以外に中の神出現処理なんて無いのでこれ移植したところで使用される機会は無いのですが……(ウィザードモードで「キャラ生成 ハイパー・ヤカテクト」を願えば出せることは出せます)

// キャラID:481 《ハイパー・ヤカテクト》(ID:481 画像ID:495)  ※Plusの追加キャラ
if ( dbid == 481 ) {
	if ( dbmode == 103 ) {
		if ( jp ) {
			txtef 9
			txt_select dbaatalk, "「ええ加減にせいっ!」", "「なに呑気に寝とるん?」", "", "", "", "", "", "", ""
			return 1
		}
	}
	if ( dbmode == 104 ) {
		if ( jp ) {
			txtef 9
			txt_select dbaatalk, "「ご飯にするん?お風呂にするん?それとも、お・布・施?」", "", "", "", "", "", "", "", ""
			return 1
		}
	}
	if ( dbmode == 16 ) {
		if ( dbspec == 3 ) {
			return 6
		}
		if ( dbspec == 5 ) {
			return 0
		}
		if ( dbspec == 6 ) {
			return 1
		}
		if ( dbspec == 2 ) {
			return "" + lang("《ハイパー・ヤカテクト》", "<Hyper Yacatect>")
		}
		if ( dbspec == 8 ) {
			return "" + "/god/"
		}
		return 0
	}
	if ( dbmode == 2 ) {
		dbidn = "god"
		dbmode = 2
		gosub *label_1116
		cpicref = 495
		cpicref += 0 * 1000
		return
	}
	if ( dbmode == 3 ) {
		cdata(27, rc) = 481
		if ( initlv != 0 ) {
			cdata(38, rc) = initlv
		}
		else {
			cdata(38, rc) = limitmax(1200, cfg_mmah_maxlevel)
		}
		if ( voidlv != 0 ) {
			cdata(38, rc) = limit(voidlv * (50 + cdata(38, rc)) / 50, 1, cfg_mmah_maxlevel)
		}
		cdata(13, rc) = -1
		cdata(202, rc) = 1
		cdata(207, rc) = 50
		cdata(208, rc) = 2
		cdata(209, rc) = 10
		creaturepack = 0
		//cdata(215, rc) = -2, -2, -2, -2, 697 // 高速ラッシュ(Plus専用)
		//cdata(220, rc) = 738, 755 // ストラックアウト(Plus専用), シャイニングスロー(Plus専用)
		cdata(215, rc) = -2, -2, -2, -2, -1
		cdata(220, rc) = -1, -1
		cdata(212, rc) = 25
		cdata(23, rc) += 1
		cdatan(0, rc) = lang("《ハイパー・ヤカテクト》", "<Hyper Yacatect>")
		cdata(9, rc) = -3
		cdata(69, rc) = -3
		cdata(40, rc) = -10000
		dbidn = "god"
		dbmode = 3
		gosub *label_1116
		dbidn = "predator"
		dbmode = 3
		gosub *label_1117
		cdata(8, rc) = 1
		cdata(7, rc) = 495
		cdata(7, rc) += 0 * 1000
		fixlv = 6
		cspecialeq = 1
		return
	}
	if ( dbmode == 4 ) {
		//eqrange = 830 // ライ(Plus専用)
		return
	}
	return 0
}

実際にハイパーヤカテクトのキャラ定義を移植してみた例になります。

試しにハイパーヤカテクトを移植してみました

せっかくなので「キャラ生成 ハイパー・ヤカテクト」を願って生成してみました。もちろん普通に戦えば一瞬でミンチにされる為、即座に支配の杖で支配。中の神ということでLv1200(関数limitmaxで設定した通りですね)。主能力は全てカンスト。職業プレデターなので格闘が恐ろしいことになってます……

中の神だけあってLv1200主能力全カンストです

皆さんもこんな感じでどんどん好きなキャラを追加・移植していきましょう!

この記事が気に入ったらサポートをしてみませんか?