Terraria Mod開発の話

暇なときのメモ書き

鉱石を追加しよう

テラリアには土ブロック、石ブロック、金鉱石、プラットフォーム、家具...様々なタイルがあります。美味しいものも
今回は鉱石に焦点を絞って、テクスチャにも触れていきます。

    public class BlogOreTile : ModTile
    {
        public override void SetDefaults()
        {
            Main.tileSolid[Type] = true; //通り抜けとか上に登ったりとか
            Main.tileMergeDirt[Type] = true; //草を土に変えるかとか
            Main.tileSolidTop[Type] = false; //テーブルとかプラットフォームとか上に乗れるけどすり抜けられるやつ
            Main.tileNoAttach[Type] = true; //松明とかをブロックに置けないようにする
            Main.tileLavaDeath[Type] = false; //マグマに触れた時の破壊
            Main.tileBlockLight[Type] = true; //光を遮るか
            Main.tileSpelunker[Type] = true; //スペランカーポーションで光るか
            dustType = DustID.Iron; //生成するダストの種類
            drop = mod.ItemType<BlogOreItem>(); //壊したときに出るアイテム
            ModTranslation name = CreateMapEntryName();
            name.SetDefault("Blog Ore");
            AddMapEntry(new Microsoft.Xna.Framework.Color(200, 200, 200), name); //この上の2行と合わせてMapで名前を表示する、name.SetDefault内のを変えると名前を変えられる
            mineResist = 1.5f; //ダンジョンとかの掘れるけど固いブロック
            minPick = 20; //掘るのに必要なピッケルパワー
        }

        public override bool CanExplode(int i, int j)
        {
            return Main.hardMode;
        }

        public override void NumDust(int i, int j, bool fail, ref int num)
        {
            num = fail ? 1 : 3;
        }
    }

まずは、タイルの通り抜けの有無ですが、Main.tileSolid[Type]をtrueにすることで通り抜け不可な土ブロックのようなものになります。
鉱石を追加するうえで重要なのは、スペランカーポーションで光るようにしたりするところですね、これはMain.tileSpelunkerになります。
このパラメーター一つでマジックランタンとかMoonlordの目玉ペットとかも反応するようになったりします。
dustTypeにはひとまず鉄を入れてあります。これはタイルを掘る時に出るダスト(エフェクト)です。Mod追加のものを使いたいならば、mod.DustType("BlogModDust")とでもしておいてください。
一応、mod.DustType()という形を推奨しておきます。いずれ詳しく書くので今は読み流してください。
鉱石なのでマップで名前が出るようにしたいです。AddMapEntryで名前とマップ上での色を渡します。
mineRegistで固いブロックの表現ができます。minPickで最低ピッケルパワーの定義ができます。
鉱石なのでその入手段階に応じて決めるべきです。
ちなみに、ピッケルパワーで掘る回数が決まるので(100%で壊れる)、掘るスピードと合わせてバランス調整を考えるべきです。
CanExplode()で爆破可/不可を設定できます。例ではハード前は不可、ハード後は可です。
NumDustは生成するダストの数を返します。
この?と:の分はif文で、?の前を条件、その次にtrueの処理、:を挟んでfalseの処理となっています。
例ではtileNoAttachをtrueにしていますが、これをfalseにしておいてください。効果を実感してもらうためのものです(本来はテーブルとかそういうものにつけます)
f:id:kodamamiyabi:20180224014523p:plainf:id:kodamamiyabi:20180224014557p:plain
テクスチャは、一か所につき3種類あります。その箇所は基本的に土との親和性を考えなければ(ガラスなど)20種類、考えるならば20+37の57種類です。
BarやWoodenBeam等のテクスチャについては別の記事で紹介します。
一枚目の画像では全ての出るパターンを網羅しています。
自分で確認しやすいようにテクスチャを作って、自分で確認しながら調整しましょう。もし、テクスチャを描くならば繋ぎ目を確認して、どのパーツがどのように繋がるかを考えて描くといいです。
できたテクスチャはBlogOreTileとして保存します。クラス名と同じです。
さて、これでタイルの追加はできました。あとは何をしますか?アイテムの追加です。
一休みしてからみていきましょう。

    public class BlogOreItem : ModItem
    {
        public override void SetStaticDefaults()
        {
            DisplayName.SetDefault("Blog Ore");
        }
        public override void SetDefaults()
        {
            item.width = 12;
            item.height = 12;
            item.maxStack = 999;
            item.useTurn = true;
            item.autoReuse = true;
            item.useAnimation = 15;
            item.useTime = 10;
            item.useStyle = 1;
            item.consumable = true;
            item.createTile = mod.TileType<BlogOreTile>();
        }
        public override void AddRecipes()
        {
            ModRecipe recipe = new ModRecipe(mod);
            recipe.AddIngredient(ItemID.DirtBlock, 1);
            recipe.SetResult(this, 1);
            recipe.AddRecipe();
        }
    }

まずはアイテム名の設定から、これは消費アイテムなのでconsumableをtrueにします。
そしてcreateTileにBlogOreTileを入れて終わり。ね?簡単でしょ?
これはどこに置いても(アイテムと一緒でも、鉱石タイルと同じでも)いいのですが、この後用意する画像を置いたところと同じ場所に置く必要があるので注意してください。
f:id:kodamamiyabi:20180224020201p:plain
これもクラス名と同じで...BlogOreItemとします。
ひとまず土ブロックをハンドクラフトで作れるようにしました。
色々パラメーターを変更して遊んでみてください。遊びからMod開発は始まります。