約 3,416,765 件
https://w.atwiki.jp/frets/pages/24.html
MODの入れ方 テーマ類やグラフィックの差し替えなどのファイルが大半を占めているようです。導入については、modsフォルダに入れるタイプと、Themesフォルダに入れるタイプ、指定された画像を書き換えるタイプがあります。付属のReadme.txtなどを読んでください。 MOD類は海外Frets On Fire Wikiのこのページにまとまってあります。 有名なMOD 名称 未記入です 名称 未記入です FOF専用のツール類 ツール類は海外Frets On Fire Wikiのこのページにまとまってあります。 代表的なものは下のリストにまとめてあります。備考部分の記入をお願いします。 名称 備考 Song.ini Generator v2.2 ・・・・・・ FoF - Song Manager 3.17 ・・・・・・ FoF - Mod selector ・・・・・・ EOF (Editor On Fire) ・・・・・・ Song Organizer ・・・・・・ MSN Song Display ・・・・・・ Nukular FoF Tools GUI ・・・・・・ RF-mod3.5 Song Launcher ・・・・・・ Sunblood s FretsOnFire Random and Playlist tool ・・・・・・
https://w.atwiki.jp/akasatanahama/pages/63.html
概要 ドロップアイテムがそのブロック自身ではなく、さらに経験値をドロップするブロックを追加し、地下に生成させる。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; public static Item aluminium; public static Block oreAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { aluminium = new Item() .setCreativeTab(CreativeTabs.tabMaterials) .setUnlocalizedName("aluminium") .setTextureName("aluminiummod aluminium"); GameRegistry.registerItem(aluminium, "aluminium"); oreAluminium = new AluminiumOre() .setBlockName("oreAluminium") .setBlockTextureName("aluminiummod aluminium_ore"); GameRegistry.registerBlock(oreAluminium, "oreAluminium"); } @EventHandler public void init(FMLInitializationEvent event) { GameRegistry.registerWorldGenerator(new AluminiumOreGenerator(), 0); } } AluminiumOre.java package tutorial.aluminiummod; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; public class AluminiumOre extends Block { private Random random = new Random(); public AluminiumOre() { super(Material.rock); this.setCreativeTab(CreativeTabs.tabBlock); this.setHardness(3.0F); this.setResistance(5.0F); this.setStepSound(Block.soundTypeStone); this.setHarvestLevel("pickaxe", 2); } @Override public Item getItemDropped(int meta, Random random, int fortune) { return AluminiumMod.aluminium; } @Override public int quantityDroppedWithBonus(int fortune, Random random) { if (fortune 0 Item.getItemFromBlock(this) != this.getItemDropped(0, random, fortune)) { int i = random.nextInt(fortune + 2) - 1; if (i 0) { i = 0; } return this.quantityDropped(random) * (i + 1); } else { return this.quantityDropped(random); } } @Override public int getExpDrop(IBlockAccess iBlockAccess, int meta, int fortune) { return MathHelper.getRandomIntegerInRange(random, 3, 7); } } AluminiumOreGenerator.java package tutorial.aluminiummod; import java.util.Random; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraft.world.WorldProviderSurface; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.feature.WorldGenMinable; import cpw.mods.fml.common.IWorldGenerator; public class AluminiumOreGenerator implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { if (world.provider instanceof WorldProviderSurface) { generateOre(world, random, chunkX 4, chunkZ 4); } } private void generateOre(World world, Random random, int x, int z) { for(int i = 0; i 10; i++) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); new WorldGenMinable(AluminiumMod.oreAluminium, 0, 20, Blocks.stone).generate(world, random, genX, genY, genZ); } } } 解説 Block Item getItemDropped(int meta, Random random, int fortune) そのブロックを破壊したときにドロップするアイテムを返す。 int quantityDroppedWithBonus(int fortune, Random random) 破壊するのに使用したツールの幸運レベルをもとに、ドロップ数を変更する。 int getExpDrop(IBlockAccess iBlockAccess, int meta, int fortune) 経験値のドロップ量を返す。 GameRegistry void registerWorldGenerator(IWorldGenerator generator, int modGenerationWeight) GameRegistryにチャンク生成時にブロックを自然生成させるためのクラスを登録するメソッド。 第二引数は生成の優先度(?)。 IWorldGenerator チャンク生成時にブロックを自然生成させるためのインターフェース。 generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) world.providerはそのワールド(ディメンション)のプロバイダ。 これを使って判定することで鉱石を生成するディメンションを制御できる。 WorldGenMinable ブロックを生成させるクラスの一つ。 コンストラクタで指定したパラメータをもとにgenerateで鉱脈を生成する。 コンストラクタ(Block block, int meta, int number, Block target) 引数は、生成するブロック、生成するブロックのメタデータ、生成する鉱脈の大きさ、置き換えるブロック。 第二引数はなくてもよい。 boolean generate(World world, Random random, int x, int y, int z) 鉱脈を生成する処理。 戻り値は生成が成功したかどうか。 使用例 オファレン鉱石を追加している部分。 +オファレンMOD OfalenModCore.java package nahama.ofalenmod; /*略*/ /**@author Akasata Nahama*/ @Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION) public class OfalenModCore { public static final String MODID = "OfalenMod"; public static final String MODNAME = "Ofalen Mod"; public static final String VERSION = "[1.7.10]1.0.0"; /*略*/ /**最初に行われる処理。アイテム・ブロックの追加などを行う*/ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ //アイテムを設定するメソッドを実行 OfalenModItemCore.registerItem(); //ブロックを設定するメソッドを実行 OfalenModBlockCore.registerBlock(); /*略*/ } /**2番目に行われる処理。レシピの追加などを行う*/ @EventHandler public void init (FMLInitializationEvent event) { //鉱石を生成させる GameRegistry.registerWorldGenerator(new OfalenOreGenerator(), 1); /*略*/ } /*略*/ } +あまり関係ないので格納 OfalenModItemCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModItemCore { /*略*/ public static Item fragmentOfalen; /*略*/ /**アイテムを設定する*/ public static void registerItem () { /*略*/ fragmentOfalen = new Ofalen() .setUnlocalizedName("fragmentOfalen") .setTextureName("ofalenmod ofalen_fragment"); GameRegistry.registerItem(fragmentOfalen,"fragmentOfalen"); /*略*/ } } Ofalen.java package nahama.ofalenmod.item; import net.minecraft.util.IIcon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class Ofalen extends Parts { public Ofalen () { super (4); } /**メタデータにより返すIIconを変える。*/ @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { return iicon[meta 3]; } /**メタデータを返す。*/ @Override public int getMetadata(int meta) { return meta 3; } } Parts.java package nahama.ofalenmod.item; import java.util.List; import nahama.ofalenmod.OfalenModCore; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class Parts extends Item { protected IIcon[] iicon; private final int type; public Parts (int type) { super (); this.type = type; this.setCreativeTab(OfalenModCore.tabOfalen); this.setHasSubtypes(true); this.setMaxDamage(0); } /**メタデータ違いのテクスチャを登録する*/ @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister register) { this.iicon = new IIcon[type]; for (int i = 0; i type; i ++) { this.iicon[i] = register.registerIcon(this.getIconString() + "-" + i); } } /**メタデータにより返すIIconを変える*/ @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { return iicon[meta]; } /**メタデータ違いのアイテムを登録する*/ @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs creativeTab, List list) { for (int i = 0; i type; i ++) { list.add(new ItemStack(this, 1, i)); } } /**メタデータを返す*/ @Override public int getMetadata(int meta) { return meta; } /**メタデータにより内部名を変える*/ @Override public String getUnlocalizedName(ItemStack itemStack) { return this.getUnlocalizedName() + "." + itemStack.getItemDamage(); } } OfalenModBlockCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModBlockCore { //ブロックの定義 public static Block oreOfalen; /*略*/ /**ブロックを設定する*/ public static void registerBlock () { oreOfalen = new OfalenOre() .setBlockName("oreOfalen") .setBlockTextureName("ofalenmod ofalen_ore-"); GameRegistry.registerBlock(oreOfalen, ItemOfalenBlock.class, "oreOfalen"); /*略*/ } } OfalenOre.java package nahama.ofalenmod.block; import java.util.List; import java.util.Random; import nahama.ofalenmod.OfalenModCore; import nahama.ofalenmod.core.OfalenModConfigCore; import nahama.ofalenmod.core.OfalenModItemCore; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class OfalenOre extends Block { private IIcon[] iicon = new IIcon[4]; private Random random = new Random(); public OfalenOre() { super(Material.rock); this.setCreativeTab(OfalenModCore.tabOfalen); this.setHardness(5.0F); this.setResistance(7.5F); this.setStepSound(Block.soundTypePiston); this.setLightLevel(0.6F); this.setHarvestLevel("pickaxe", 3); } /**ドロップアイテムの設定*/ @Override public Item getItemDropped(int meta, Random random, int fortune) { return OfalenModItemCore.fragmentOfalen; } /**ドロップ数の設定*/ @Override public int quantityDropped(Random random) { return OfalenModConfigCore.amountDrop; } /**fortuneによるドロップ増加の設定。BlockOre参照*/ @Override public int quantityDroppedWithBonus(int level, Random random) { //幸運のレベルが1以上で、ドロップアイテムがこのブロック自身でない場合 if (level 0 Item.getItemFromBlock(this) != this.getItemDropped(0, random, level)) { int i = random.nextInt(level + 2) - 1; if (i 0) { i = 0; } return this.quantityDropped(random) * (i + 1); } else { return this.quantityDropped(random); } } /**経験値ドロップの設定*/ @Override public int getExpDrop(IBlockAccess iBlockAccess, int meta, int fortune) { return MathHelper.getRandomIntegerInRange(random, 3, 7); } /**メタデータ違いのテクスチャを登録する*/ @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iicon) { for (int i = 0; i 4; i ++) { this.iicon[i] = iicon.registerIcon(this.getTextureName() + i); } } /**メタデータにより返すIIconを変える*/ @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { return iicon[meta 3]; } /**メタデータ違いのブロックを登録する*/ @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs creativeTab, List list) { for (int i = 0; i 4; i ++) { list.add(new ItemStack(item, 1, i)); } } /**メタデータによりドロップ品を変える*/ @Override public int damageDropped(int meta) { return meta 3; } } OfalenOreGenerator.java package nahama.ofalenmod.generator; import java.util.Random; import nahama.ofalenmod.core.OfalenModBlockCore; import nahama.ofalenmod.core.OfalenModConfigCore; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraft.world.WorldProviderSurface; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.feature.WorldGenMinable; import cpw.mods.fml.common.IWorldGenerator; public class OfalenOreGenerator implements IWorldGenerator { public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { if (OfalenModConfigCore.enabledGenerator) { if (world.provider instanceof WorldProviderSurface) { generateOreRed(world, random, chunkX 4, chunkZ 4); generateOreGreen(world, random, chunkX 4, chunkZ 4); generateOreBlue(world, random, chunkX 4, chunkZ 4); generateOreBig(world, random, chunkX 4, chunkZ 4); } } } private void generateOreRed(World world, Random random, int x, int z) { for(int i = 0; i OfalenModConfigCore.probabilityGeneration; i++) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, OfalenModConfigCore.limitGeneration, Blocks.stone).generate(world, random, genX, genY, genZ); } } private void generateOreGreen(World world, Random random, int x, int z) { for(int i = 0; i OfalenModConfigCore.probabilityGeneration; i++) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, OfalenModConfigCore.limitGeneration, Blocks.stone).generate(world, random, genX, genY, genZ); } } private void generateOreBlue(World world, Random random, int x, int z) { for(int i = 0; i OfalenModConfigCore.probabilityGeneration; i++) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, OfalenModConfigCore.limitGeneration, Blocks.stone).generate(world, random, genX, genY, genZ); } } private void generateOreBig(World world, Random random, int x, int z) { int i = random.nextInt(10000); if (i OfalenModConfigCore.probabilityGenerationLode) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); int type = random.nextInt(19)/3; switch (type) { case 0 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 1 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 2 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 3 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 4 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 5 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 6 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 3, 40, Blocks.stone).generate(world, random, genX, genY, genZ); } new WorldGenMinable(OfalenModBlockCore.oreOfalen, 3, 40, Blocks.stone).generate(world, random, genX, genY, genZ); } } } コメント この項目に関する質問などをどうぞ。 鉱石から鉱石ブロックをドロップする方法くぉおあいえていただけないでsy - World_of_the_Takumi 2016-03-11 07 40 22 AluminiumOreクラスで、getItemDropped・quantityDroppedWithBonus・getExpDropの部分を削除すればできます。 - 赤砂蛇凪浜 2016-03-13 07 44 13 返信ありがとうございました、わかりにくいコメントですいません。今後から気を付けます。あともう一つお願いします" new WorldGenMinable(AluminiumMod.oreAluminium, 0, 20, Blocks.stone).generate(world,”以降はどうなっていますか。wikiにものってなかったのでお願いします。 - World_of_the_Takumi 2016-03-13 19 18 57 ソースコードの表示が見切れてしまっていたでしょうか。このようになっています。new WorldGenMinable(AluminiumMod.oreAluminium, 0, 20, Blocks.stone).generate(world, random, genX, genY, genZ); - 赤砂蛇凪浜 2016-03-14 06 40 37 ありがとうございました。感謝します - World_of_the_Takumi 2016-03-14 17 38 44 はじめまして このような素晴らしいwikiをありがとうございます 一つ気になることがあるのですが AluminiumOreGenerator.javaの22行目 「for(int i = 0; i 64; i++) {」 26行目 「new WorldGenMinable(decorationMOD.oreDecoration, 0, 64, Blocks.stone).generate(world, random, genX, genY, genZ);」 としているのですが 地下に鉱石が生成された気配が全くありません どこか間違えている・その他に設定が必要 などありましたら教えていただけないでしょうか 長文失礼しました - さくら 2016-04-01 00 10 45 こちらの環境でそのように変更すると、チャンクを読み込もうとしたときにクラッシュしました。鉱石はクリエイティブタブなどから利用できますか?GameRegistry.registerBlockをpreInitで呼び出しているか、GameRegistry.registerWorldGeneratorをinitで呼び出しているかなどを確認してください。WorldGenMinable.generateの次の行に「FMLLog.info("Generated ore. (" + genX + ", " + genY + ", " + genZ + ")");」と入れてログを確認するのも有効かと思います。 - 赤砂蛇凪浜 2016-04-01 06 58 20 返信ありがとうございます。まず報告からなんですが、行けました! 無事に生成されてました。ありがとうございます。で、原因なんですが「GameRegistry.registerWorldGeneratorをinitで呼び出しているかなどを確認してください。」というのが気になったので 上をよく見るとそのような文章があり、「げ」と思ってEclipseを見なおしたところ追加し忘れていました。お騒がせして申し訳ありません。 (int i = 0; i 16; i++) WorldGenMinable(decorationMOD.oreDecoration, 0, 8, Blocks.stone) として無事生成できました。本当にありがとうございました!長文、大変失礼いたしました - さくら 2016-04-02 05 55 25 解決できたようでよかったです。 - 赤砂蛇凪浜 2016-04-02 06 10 29 わかりやすい解説ありがとうございます。アイテムをドロップさせる際にメタデータを指定する為にはどのようにすればよいのでしょうか。よろしくお願いします。 - asajyra 2016-04-02 02 14 53 MOD製作チュートリアル/メタデータを持つブロックの追加でも触れていますが、AluminiumOre内で、Block.damageDropedをオーバーライドするとできます。 - 赤砂蛇凪浜 2016-04-02 06 12 33 WorldGenMinableのコンストラクタの第三引数をバニラの鉱石を参考にしたいのですが、バニラの鉱石のWorldGenMinableってどこにあるんですかね? - 名無しさん 2017-02-08 21 38 00 net.minecraft.world.biome.BiomeDecoratorのコンストラクタにおいて、通常世界の鉱石類のためにWorldGenMinableインスタンスの生成が行われています。(以下、補足。今後のModdingをより便利に行うためにご活用ください。)このような情報はIDEの機能を使うと簡単に調べることができます。今回の場合、コード内の「WorldGenMinable」にカーソルを合わせて「定義へ移動」(EclipseではF3)をすると、Forgeコード内のコンストラクタ記述部に移動でき、WorldGenMinableがコンストラクタを三種類持っていることがわかります。それぞれのコンストラクタ記述部にカーソルを合わせて「呼び出し階層を開く」(EclipseではCtrl+Alt+H)をすると、それぞれがどこから呼び出されているかがわかります。WorldGenMinable(Block p_i45459_1_, int p_i45459_2_)がBiomeDecoratorから呼び出されていることはこうして調べました。 - 赤砂蛇凪浜 2017-02-10 18 39 31 丁寧な回答ありがとうございます。どうにか丁度よい生成量にできました! - 名無しさん 2017-02-10 22 55 50 すみません、鉱石の生成率を鉱脈の大きさを変えるのにはどうすればいいんですか?わかりにくい質問でごめんなさい - 頭の中お花畑 2017-04-13 22 22 48 鉱石の生成率の件は解決しました。鉱脈の大きさを決めるプログラムを教えていただけますでしょうか。何度もすいません - 頭の中お花畑 2017-04-13 23 25 16 「解説」に記載してありますが、WorldGenMinableのコンストラクタの第三引数である"int number"を変更することで大きさを制御できます。これは、生成される可能性のある最大のパターンでの鉱石数を指定しています。 - 赤砂蛇凪浜 2017-04-14 18 34 08 ありがとうございます!早速試してみます! - 頭の中お花畑 2017-04-16 19 26 45 名前
https://w.atwiki.jp/siraha-minecraft/pages/18.html
MODによっては入れなきゃいけない前提Mod。大抵専用。まったく関係ない物が入ってても不都合なかったりする。 AndCore QuiverMODの前提Mod。 GuffCore Minor Alchemyの前提Mod CoFHcore ThermalExpansionの前提Mod *
https://w.atwiki.jp/rasuku_wiki/pages/19.html
影MOD Minecraftの見た目をリアルにしてくれるMOD。 いれると自然の日光が部屋に差し込んだりしてすごくきれい!。 おすすめのシェーダー BSL Shader https //www.curseforge.com/minecraft/customization/bsl-shaders (掲載者 ねず~)
https://w.atwiki.jp/ayaka_osu/pages/11.html
難易度低下Mod Easy (EZ) Standard 効果 CS、AR、OD、HPが0.5倍 2回まで死んでも復活できる スコア倍率 0.5倍 メモ AR低下がヤバい Taiko 効果 スクロール速度、OD、HPが0.5倍 スコア倍率 0.5倍 メモ スピナーの必要ヒット数がODによって減る Easyなのに簡単 Catch 効果 CS、AR、OD、HPが0.5倍 2回まで死んでも復活できる スコア倍率 0.5倍 メモ ODが下がっても意味ない Mania 効果 OD、HPが0.5倍 2回まで死んでも復活できる スコア倍率 スコア倍率が0.5倍 メモ スクロール速度は変わらない キー数も変わらない No Fail (NF) All Mode 効果 HPがなくなっても死なない スコア倍率 0.5倍 PP補正 基本倍率は1.0倍 ミスする度に倍率が0.02倍減算される 最小倍率は0.9倍 Half Time (HT) Standard 効果 BPMが0.75倍 スコア倍率 0.3倍 Taiko 効果 BPMが0.75倍 スコア倍率 0.3倍 スピナーはスコア倍率の影響を受けない メモ コンボ数が少なく長いスピナーが多い譜面ではスコアが増える Catch 効果 BPMが0.75倍 スコア倍率 0.3倍 Mania 効果 BPMが0.75倍 スコア倍率 0.5倍 難易度上昇Mod Hardrock (HR) Standard 効果 CSが1.3倍 AR、OD、HPが1.4倍 譜面が上下反転 スコア倍率 1.06倍 Taiko 効果 スクロール速度上昇 OD、HPが1.4倍 スコア倍率 1.06倍 メモ ODの上昇によりスピナーの必要ヒット数が増える Catch 効果 CSが1.3倍 AR、OD、HPが1.4倍 スコア倍率 1.12倍 Mania 効果 HPが1.4倍 タイミングウィンドウが約29%厳しい スコア倍率 1.00倍 Unranked スコアは記録されません メモ HR適用後タイミングウィンドウ=元のタイミングウィンドウ/1.4 虹300のタイミングウィンドウはODに関係なく固定(HR適用後 ±11.43ms) Sudden Death (SD) All Mode 効果 ミスをすると即失敗になる スコア倍率 1.00倍 失敗になる場合 ノートを逃す (Standardのみ)スライダーティックを逃す スピナーを回しきれない 失敗にならない場合 スライダーの終点を逃す スライダーの空白部分をなぞらない Perfect (PF) All Mode 効果 SSランクを逃すとリトライする スコア倍率 1.00倍 Double Time (DT) Standard 効果 BPMが1.5倍 スコア倍率 1.12倍 Taiko 効果 BPMが1.5倍 スコア倍率 1.12倍 Catch 効果 BPMが1.5倍 スコア倍率 1.06倍 メモ ODが上昇しても意味ない Mania 効果 BPMが1.5倍 スコア倍率 1.00倍 Nightcore (NC) All Mode 効果 Double Timeと同様 曲のピッチが上昇してNightcoreっぽいドラムが付く スコア倍率 Double Timeと同様 Hidden (HD) Fade In (FI) Flashlight (FL) 特殊Mod Relax (RL) Autopilot (AP) Spun Out (SO) 1K~9K (xK) Co-op (CP) Mirror (MR) Random (RD) Auto (AT) Cinema (CM) Score V2 (SV2) Target Practice (TP) 削除されたMod 10K Fade Out No Video
https://w.atwiki.jp/civilization/pages/313.html
MOD/作成情報/はじめてのMOD作り その5 MOD/作成情報/はじめてのMOD作り その4の続き MOD/作成情報/はじめてのMOD作り その5 [#ud08efd2] 信長MOD (続き) [#b4b14c09] 文明と指導者を関連付ける [#fb6c58b2] 外交セリフを定義する [#c0c871a6] Textフォルダ内のXMLのしくみ [#x68dfd90] 文字エンコードに小細工 [#t5884120] 文字列データの入力 [#oa2d7971] グラフィック [#s0b104f8] 参考:既存の指導者顔を使い回す場合 [#r59afa3f] 完成 [#u201a92e] MODの公開 [#d104cb49] 説明書(Readme) [#x7616c33] 圧縮、アップロード、公開 [#qdb64b6a] 信長MOD まとめ [#gf24c03e] MODに関するあれこれ [#x3dfadd0] MOD作りのアイディア [#vdd48476] XMLでできること、できないこと [#j001143a] CustomAssetsで使うMOD [#bc7602e9] iniファイル [#i9ae9e27] さらなるMOD作りへ [#z6d67494] おわりに [#jc281c19] 信長MOD (続き) 「はじめてのMOD作り」も、いよいよ最終回です。 集大成となる「信長MOD」を、完成させましょう! 前回は、CIV4LeaderHeadInfos.xmlまで作ったのでしたね。 [[編集対象ファイル ../はじめてのMOD作り その4#o28b92ab]]7つのうち、残り6つの編集に進みましょう。 文明と指導者を関連付ける 次は、XML\Civilizations\CIV4CivilizationInfos.xml(*1) です。 このファイルは文明についての情報を定めています。XMLEditor.NETで開くと…、 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 ユニットや指導者のとき(*2)と同様の構造ですね。 CivilizationInfos の下に、たくさんの CivilizationInfo がぶら下がっています。それぞれの CivilizationInfo の下に、ひとつの文明の情報が詰まっている…、と想像がつくでしょう。 日本文明は、 Type タグの内容が "CIVILIZATION_JAPAN" のものです(*3)。 その中に、文明を率いる指導者を定義している部分があります。日本文明の部分を見ると…、 Leaders Leader LeaderName LEADER_TOKUGAWA /LeaderName bLeaderAvailability 1 /bLeaderAvailability /Leader Leader /Leaders このように、指導者として徳川家康のみが定められています。 となると…、このMODでやるべきことは、分かりますね。 日本文明の指導者として、織田信長を追加しましょう。 家康の Leader 部分をコピーして…、 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 貼り付け(次ノード)をして、信長の指導者キー LEADER_NOBUNAGAに書き換えます。必ず、 CIV4LeaderHeadInfos.xml で定めた指導者キーと一致させてください。 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 これで、CIV4CivilizationInfos.xml は修正完了です。 外交セリフを定義する 3つめに編集するファイルは、CIV4DiplomacyInfos.xml。XML\GameInfo フォルダ内にあります。 このファイルでは、外交時にAIが言うセリフを定義しています。 Civ4では、ほとんどの外交セリフは各指導者共通で用いられており(*4)、信長も交渉成立時には「チャリン!」と言ってくれます。 そういう意味では原則として、信長を加えたからといって外交セリフに手を入れる必要はないわけですが…。 ところが、ひとつだけ、共通のセリフが存在しないものがあります。それは、「初回遭遇時」。 「5万人ずつの奴隷を生け贄として、この出会いを祝おうではないか!」などというセリフを吐けるのはモンテスマだけでしょう。同じように、初回遭遇時のセリフはすべて各指導者固有のもの。つまり、AI信長と遭遇しても、今のままでは話せるセリフが無いのです。 AI信長との初回遭遇時のセリフを定義してあげましょう。 [[CIV4DiplomacyInfos.xmlの説明 ../指導者の編集#a1f2c14a]]にしたがい、このファイルをXMLエディタで開きます。 ます初回遭遇時のキー"AI_DIPLOCOMMENT_FIRST_CONTACT"(*5)がある部分を見つけ、既存の誰かの Response をコピーして、次ノードに貼り付け。 そして LeaderType の内容をLEADER_NOBUNAGAに、 DiplomacyText 内の Text の内容をAI_DIPLO_FIRST_CONTACT_LEADER_NOBUNAGA_1に変えます(要するに、コピー元キーの指導者名のところを"NOBUNAGA"に置き換える、といういつものやり方です)。 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 このファイルで定義しているのは、外交イベント(例:初回遭遇)と、その時のセリフのテキストキー"AI_DIPLO_FIRST_CONTACT_LEADER_NOBUNAGA_1"の対応だけです。 テキストキーに対応する実際のセリフは、このあと別のファイルで記述します。 このファイルを上書き保存しましょう。これでCIV4DiplomacyInfos.xmlの編集は完了です。 Textフォルダ内のXMLのしくみ 次は、 XML\Text\CIV4GameText_Objects_BTS.xml と XML\Text\CIV4GameText_Civilopedia_BTS.xml 、そして XML\Text\CIV4GameText_DiplomacyText_BTS.xml の3つです。 XMLTextディレクトリにあるXMLファイルは、Civ4で使われるさまざまな文字列(名称や文章)を定義しています。例えば[[「その2」 ../はじめてのMOD作り その2]]で述べた通り、開拓者ユニットの名前キー(TXT_KEY_UNIT_SETTLER)に対応する文字列を、日本語で「開拓者」、英語で"Settler"などと定義しています。 信長MODならば、例えば新指導者の名前が「織田信長」であるという内容を書き加えることになるわけですが…。 今回は、次のような変則的な扱いにします。 1.CIV4GameText_Nobunaga.xmlという別名のファイルを作り、そこに文字列データを格納する。 XML\Textフォルダ内のファイルに限っては、本来のものとは別のファイルにデータを入れてもかまわないのです。そして、後に説明しますが、別ファイルにすれば文字エンコードを変換せず、直接日本語(シフトJIS)を入力できるので楽に作れます。(*6) 2.XMLEditor.NETではなく、テキストエディタを使う。 Textフォルダ内のファイルはXMLの構造が単純なため、XMLエディタでなくても編集ミスしにくいです。また、筆者の環境ではXMLEditor.NETの文字エンコードの設定変更がうまく働かなかったため。 1について、詳しく説明しましょう。XML\Textフォルダ内のファイルは、実はすべて全く同じ構造をしています。(*7) この講座[[「その2」 ../はじめてのMOD作り その2]]で示した例を再度取り上げましょう。 CIV4GameTextInfos_Objects.xmlより抜粋 TEXT Tag TXT_KEY_UNIT_SETTLER /Tag English Settler /English (中略) Japanese Text #38283; #25299; #32773; /Text (中略) /TEXT 注:" #38283; #25299; #32773;"=「開拓者」です。詳細は「その2」参照。 一つの TEXT タグの中にあるのは、 Tag タグに入った文字列キーと、 English Japanese などに入った各国語の文字列。 文字列キーと、各国語文字列の対応という単純な構造です。 そして、このファイルは同じ構造の TEXT タグが並んでいるだけです。ユニット名だろうが指導者名だろうが技術名だろうが建造物名だろうが、おかまいなし。とにかく、文字列キーと実際の文字列の対応がズラズラっと横並びになっています。そしてファイル全体が Civ4GameText タグで囲まれて、おしまい。これだけです。 いえ、このファイルだけではありません。Textフォルダ内の全ファイルが、全く同じ構造をしているのですよ。シヴィロペディアにあるような長文でさえも、一つの TEXT にまとめて放り込まれています。とにかく TEXT 、 TEXT 、 TEXT ……。それだけです。(*8) ここからは推測ですが、おそらくCiv4のプログラムは、Textフォルダ内にあるキーと文字列の対応データを、ファイル名だとかデータの意味だとかを意識せずに、 TEXT の羅列として全部まとめて読み込んでしまうのだと思います。 逆に言えば、文字列データを格納するファイルは、Textフォルダ内にありさえすれば、どんな名前のファイルに書かれていても変わらない、ということになります。 ユニット名だろうが技術名だろうが、「文字列データ」として同列に扱われるから、XMLの構造が単純になり、こういう気の利いたMOD作りが可能になる。「その2」で書いた「XMLでキーを使う利点」が、しっかり表れていますね。 文字エンコードに小細工 というわけで、上記の方針で文字列を定義していきましょう。 テキストエディタで、新規ファイル CIV4GameText_Nobunaga.xml の作成を開始します。 何でもいいので、XML\Textフォルダ(*9)内にある既存のXMLファイルを、テキストエディタで開いてみましょう。最初のほうは、 ?xml version="1.0" encoding="ISO-8859-1"? !-- (数行省略)-- Civ4GameText xmlns="http //www.firaxis.com" TEXT こうなっています。 <!-- (数行省略)--> (*10)とある部分には著作権(Copyright)表示などがありますが、XMLにおいて<!--と-->で囲まれた部分は単なる「コメント」として扱われ、本質的な意味は無いので、気にする必要はありません。 ただし、本データ内に入れてしまうと誤作動の原因になるので、コメントを置きたい場合は冒頭や最後にしておいた方がいいでしょう。 このファイルの最後は、 /TEXT /Civ4GameText これで終わっています。信長MODで作る新規ファイルも、この構造を真似ればいいわけですから、最初と最後をコピー&ペースト(*11)します。 そして、ここでひと工夫。 先頭行から encoding="ISO-8859-1"という部分を削除して、 ?xml version="1.0"? としてしまいましょう。この手法は、[[MOD/日本語化 ../../日本語化#s5779360]] にもとづいています。 その意図を解説します。 encoding="ISO-8859-1"というのは、文字エンコードを西ヨーロッパ言語(ISO-8859-1)にするという意味です。これを指定していると、Civ4のプログラムはWindowsで普通に入力した日本語(システム設定に依存しますが、Shift JISになっている人が多いと思います)を読み取ってくれません。この場合、上に示した開拓者の例のように、Unicode実体参照に変換して書かなくてはいけないのです。 しかし、この指定を削除してやれば、Civ4日本語版のプログラムは、普通に入力された日本語をShift JISだと理解して、ちゃんと読み取ってくれるようになります。つまり、 #38283;のような奇妙なものに変換する必要がなくなるわけです! ただし、この方法を使う場合でも、本来の制御記号である半角の # ; などを使用するとエラーの原因となるので注意してください。 参考:筆者は、encoding属性を消すのではなく encoding="Shift_JIS" と変更しています。(*12)実際それでも動作するようです。 これは、CIV4GameText_Nobunaga.xmlという新しいファイルを作る場合だからこそ可能なテクニックです。既存のファイルを修正する場合には通用しません。(*13)また、日本語・英語だけでなくドイツ語等にも対応したMODを作成したい場合にも使えないでしょう。 さて、これでCIV4GameText_Nobunaga.xmlの骨格ができあがりました。 ?xml version="1.0"? Civ4GameText xmlns="http //www.firaxis.com" TEXT /TEXT /Civ4GameText 文字列データの入力 あとは、中に文字列データを埋めていくだけです。 さあ、どんなデータが必要でしょうか? 信長MODという新指導者追加MODなのですから、指導者が増えることによって新しく必要となる文字列が何なのか、を考えるとよいでしょう。 答は[[「指導者の編集」のText関連の3つのファイルの説明 ../指導者の編集#ee3ddbce]]に書いてありますが、以下の通りです。 新指導者の名前-シヴィロペディアにおける、新指導者の説明記事-新指導者の外交セリフ新指導者の名前から行きましょうか。 TEXT 以下のタグを編集します。最初の Tag の内容はTXT_KEY_LEADER_NOBUNAGA。名前キー、すなわち CIV4LeaderHeadInfos.xml の Description の内容と一致させます。MOD/日本語化によると、外国語の部分、言語の指定はタグの名前( English や Japanese )によるものではなく、「上から何番目にあるか」で判断しているようだ(上から6番目が日本語扱い)とのことです。 English から Spanish までの部分はタグごと削除しないようにしましょう。例えば"Oda Nobunaga"(*14)等に直すか、空タグにするか、もしくはそのまま放置してもかまいません。そして最後に、 Japanese タグ内を「織田信長」とします。先ほど説明した通り、Unicodeに変換する必要はありません。仕上がりは、こうなりました。(*15) ?xml version="1.0"? Civ4GameText xmlns="http //www.firaxis.com" TEXT Tag TXT_KEY_LEADER_NOBUNAGA /Tag English Oda Nobunaga /English French / German / Italian / Spanish / Japanese 織田信長 /Japanese /TEXT /Civ4GameText さあ、この調子で他の文字列も作りましょう。 次はシヴィロペディア。文字列キーTXT_KEY_LEADER_NOBUNAGA_PEDIA(*16)に対応する文字列として、織田信長の解説記事を記載します。 無くてもゲームはできますので、面倒な方は省略してもかまいません。 2008/10/31追記:以下は、Civ4の既存指導者のシヴィロペディアの構造を真似て、筆者が作った信長記事(修正版)の例です(Wikipediaの記述にもとづいています)。HTMLを知る人なら、 H1 \H1 が[H1][\H1]に、 BR が[NEWLINE]に置き換わっている、などということを理解できるでしょう。 TEXT Tag TXT_KEY_LEADER_NOBUNAGA_PEDIA /Tag English (中略) /English French / German / Italian / Spanish / Japanese [H1]織田信長[\H1][NEWLINE] [BOLD]日本の戦国・安土桃山時代の大名[\BOLD][NEWLINE] [BOLD]生没年:[\BOLD]1534年~1582年[NEWLINE] [PARAGRAPH 2][BOLD]人物像:[\BOLD] [PARAGRAPH 1]織田信長は、日本の近世の最初期にあたる戦国時代から安土桃山時代にかけて、 世に多大な影響を残した武将であり、大名(戦国大名)です。 (中略) /Japanese /TEXT これが実際にどう表示されるかは、後で完成時に画像でお見せします。なお実際には、 Japanese から /Japanese までの間に改行はありません。 最後に、外交セリフ。 先ほどの「外交セリフを定義する」で、初回遭遇時のセリフを表すテキストキー AI_DIPLO_FIRST_CONTACT_LEADER_NOBUNAGA_1 だけを定義したので、それを表す実際の文字列をここで定めます。信長らしい、格好良い決め台詞を考えてみましょう。 なお、セリフ内では以下のような文字列置き換えが可能です。必要に応じて活用しましょう。(*17) [OUR_NAME} 自分の指導者名 [OUR_CIV_SHORT] 自分の文明 [CT_NAME] 話し相手(プレイヤー)の指導者名 [CT_CIV_SHORT] 話し相手の文明 例えば、こんなふうにします。 TEXT Tag AI_DIPLO_FIRST_CONTACT_LEADER_NOBUNAGA_1 /Tag English I am [OUR_NAME], the Archenemy of Dairokuten! /English (フランス語~スペイン語は空タグ) Japanese 余が第六天魔王、[OUR_NAME]じゃ! /Japanese /TEXT これら、3つの TEXT をCIV4GameText_Nobunaga.xmlにひとつにまとめて、完成です。ファイルを保存しましょう。 グラフィック 信長MOD作成も、いよいよ最終段階です。 今までは、XMLの改変だけでMODを作ろうとしてきました。しかし、新指導者の追加にあたっては、XMLだけではどうにもならない部分がひとつ存在します。 …そう、顔です。 グラフィック…こればかりは、XMLでは作れません。信長をCiv4の指導者として追加するため、外交画面などで現れる指導者・織田信長の絵をなんとか用意しなくてはなりません。あと、外交画面などで使われるボタン(指導者の顔の、小型画像)も必要です。 さて、どうするか。考えられる方法は、2つあります。 1.自分で絵を用意する アニメーション(ジェスチャーなど)・レンダリング等は専門技術がない限り困難ですが、静止画ならば何とかなります。 2.他の既存指導者の絵を流用する 今回の場合、徳川家康の顔をそのまま、織田信長のものとして採用します。 ここでは、1の方法をとることにします。 そのためには元となる画像が必要です。狩野元秀が描いた有名な信長肖像画のような、著作権が期限切れとなっている画像ならば、利用しても問題ないでしょう。 これを元に、Civ4で使えるdds形式の画像を作る必要があります。その方法の解説を読みましょう。 [[猿でも分かる指導者画像の作り方 ../猿でも分かる指導者画像の作り方]]-[[犬でも分かるボタンの作り方 ../犬でも分かるボタンの作り方]]この解説は非常に分かりやすいと思います。ので、ここでは説明を繰り返しません。次のような画像を、dds形式で用意できればOKです。織田信長の指導者画像 "Nobunaga.dds"(pngに変換、縮小しています)#ref(./Nobunaga-dds.png,left,nolink,60%) 織田信長のボタン "Nobunaga-button.dds"(pngに変換しています) #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 画像の置き場所は、MODを格納しているフォルダである Nobunaga\Assets の内部ならばどこでも良いですが、既存の指導者画像の置き場所を見習って、 Assets\Art\Leaderheads\Nobunaga としておくのが無難でしょう。 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 こういうフォルダ構造になります。 そして、7つめのXMLファイル、CIV4ArtDefines_LeaderHeads.xml(*18)を編集しましょう。 これは指導者の画像について定めたファイルであり、ここに「この場所に信長の画像ファイルがありますよ」という意味のデータを加えてやればよいのです。 書き換え方は[[「猿でも分かる~」の「XML改変」 ../猿でも分かる指導者画像の作り方#f7131735]]の説明通りで、信長MODで書き加えるXMLデータは以下の通りです。 LeaderheadArtInfo Type ART_DEF_LEADER_NOBUNAGA /Type Button ,Art/LeaderHeads/Nobunaga/nobunaga_button.dds /Button NIF Art/Leaderheads/Nobunaga/nobunaga.dds /NIF KFM/ NoShaderNIF/ BackgroundKFM/ /LeaderheadArtInfo 補足説明しておきます。 タグ Type の内容は指導者のアートキー(CIV4LeaderHeadInfos.xmlで定めたもの)。 タグ Button および NIF は Nobunaga\Assets フォルダからの相対パス(区切り文字は/)で、それぞれ指導者ボタン、指導者画像を指定します。 2008/10/22追記:元のCiv4に同梱されていないユーザ作成の画像を指定する場合は、 Button タグの内容の先頭に カンマをつけない のが正しい、との情報があります(詳細未確認)(*19)。 カンマをつけないでも動作するならば、つけないほうが良いと思われます。 これで、 CIV4ArtDefines_LeaderHeads.xml の編集も完了しました。 参考:既存の指導者顔を使い回す場合 指導者画像を用意できない場合は、既存のものを使い回すことになります。 前節で示した方法の2番についても、参考として説明しておきます。 徳川家康の顔グラフィックデータ "ART_DEF_LEADER_TOKUGAWA" を定義した LeaderheadArtInfo をコピーして…、 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 末尾にそれを貼り付けて、 Type タグの内容を ART_DEF_LEADER_TOKUGAWA から ART_DEF_LEADER_NOBUNAGA に変更する。 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 これだけで完了です。…そうでしょう? 信長のグラフィックを定義するキーであるART_DEF_LEADER_NOBUNAGA に対して、他のタグの内容が、徳川家康の顔や動きのデータのファイルの場所を指し示しているのですから、これでOKなのです。 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 完成 ついに、やっと、信長MODの完成です! シヴィロペディア #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 自分で信長を使う #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 AI信長 #ref error :ご指定のページがありません。ページ名を確認して再度指定してください。 さあ、プレイ開始です。存分に楽しみましょう! MODの公開 MODを自分だけで楽しむぶんには、このまま遊べば問題ありません。 しかし、せっかくMODを作ったのですから、公開してみんなで楽しみを分け合いましょう。 まずは自分でMODのテストプレイを行い、改変した箇所がひととおり問題なく動作することを確認したほうがよいでしょう。 AIとしての挙動を確認したい場合は、「ゲームのカスタマイズ」で開始すると確実に登場させられるので利用しましょう。 そうしたら、公開作業に入ります。 説明書(Readme) MODを利用する人のために、説明書(Readme)を用意すると良いでしょう。 書くべき内容は、MODによってさまざまですが、一般的には以下のようなものが考えられます。 MODの内容「指導者に織田信長を追加するMODです。」など-対応バージョンCiv4無印 or WL or BtS。特定パッチやMODを前提とする場合はそれも-インストール・使い方MOD/使用方法通りなら説明不要と思いますが、特別なことがあるなら-更新履歴-問い合わせ方法サポートを行うつもりがあるのなら。質問・バグ報告等の連絡先少しの内容なら、テキストファイルで十分です。大型MODならば、ReadmeをHTMLファイルにするか、Wiki内にページを作ったり専用のWebサイトを作ったりして誘導してもいいでしょう。ファイルは、MOD名フォルダ(今回ならNobunagaフォルダ)直下に置くと良いでしょう。(ちなみに、今まで筆者がアップしてきたMOD内にはReadmeがありません。ごめんなさい)***圧縮、アップロード、公開 [#qdb64b6a] MOD名フォルダ(Nobunaga)の内容を圧縮して、1つのファイルにします。(形式は何でもかまいません。筆者はzipを主に使っています) そして、それをアップロードしましょう。 MODをアップロードする場所としては、以下のようなものがあります。(*20)(2008/9/4現在。リンク切れ等あれば適宜修正してください) Civ4 Wikiペリク鯖(ここ)のファイルあぷろだ -すたすた(stack-style)のファイルアップロード掲示板-Civ4 Wiki ガンジー鯖またはペリク鯖の適当なページの添付ファイル(そのMODを説明するページを作って、そのページの添付としてアップするなど)-Civ村の「Civ4 - Creation Customization」フォーラム(*21)-CivFanaticsのMOD関係フォーラム (英語サイト)ここでは、1つめの方法を使って、信長MODをアップロード、公開しておきます。信長MOD#ref(http //wiki.rk3.jp/civ4/fileup/file/507.zip) 2008/09/21加筆・これまで公開していた信長MODに不具合があったので修正し差し替えました。 既存指導者のうちWL/BtSで追加された指導者の外交セリフが正しく表示されませんでした。XML\GameInfo\CIV4DiplomacyInfos.xml を編集する際、誤ってCiv4無印のファイルを元にしてしまったせいです。MOD作りをする皆さんは、このような凡ミスをすることのないよう、気をつけましょう。 MODの情報を告知するなら、このWikiのMOD一覧に情報を加えるか、2ch PCゲーム板 Civ4 MODスレに書き込みましょう。良いMODであれば、多くの人に使ってもらえるはずです。 信長MOD まとめ 「はじめてのMOD作り」その4~5で学んだ内容を、一般的な形でまとめておきます。これを応用すれば、別のMOD作りに役立つでしょう。 新しい何かを加えるMODを作るなら、それについて記述したXMLファイルに情報をワンセット追加すればよい。-加えたいものの種類に従って、作成情報の「XML編集」を活用しよう。-編集対象ファイルを把握しよう。加えたいものに関するXMLファイルだけでなく、他の概念との関係、テキスト、グラフィックなど多数ありうる。-新しいものを加えるにあたっては、既存のもののデータをコピーしてつけ加え、それを編集しよう。(*22)-XML\Textフォルダ内の文字列データに限っては、別名のファイルに記述してもよい。-文字列データの記述にあたっては文字エンコードに注意しよう。XML先頭のencoding属性を削除すると便利な場合がある。MOD/日本語化も参考になる。-画像作りに関しては、「猿でも分かる指導者画像の作り方」等の画像作成記事が役立つ。**MODに関するあれこれ [#x3dfadd0] 今までに書ききれなかったことを、トピックス的にまとめておきます。 MOD作りのアイディア 「どんなMODを作りたいの?」 まずアイディアが無くては、MOD作りははじまりません。と言いますか、やりたいことがなければ無理にMOD作りを始めず、普通のCiv4をやればいいのです。 筆者としては、一言で言えるような、分かりやすいコンセプトを持ったMODを作ると良い、と思います。 MODデザイン上のアドバイスとして、CivFanaticsのHOW TO Design a Modを紹介します(英語ですが)。以下はそのごく一部の意訳です。 「デザイナーが完璧に仕上げたことを知るのは、つけ加えるものがなくなったときではなく、はぶくものがなくなったときである。」-アントワーヌ・サン=テグジュペリ 新しい建造物を加えるのは容易い。難しいのは、それを真に価値のあるものにすることだ。それは必要か?他に同様の働きをするものは存在しないのか?もし答がノーなら、それをなくすことを考えるべきだ。(*23) XMLでできること、できないこと ここまでで習得したノウハウを活かせば、XMLを使って自由自在にCiv4のゲームシステムを改変することができます! …と言えればいいのですが、実際にはXMLでできることとできないことがあります。 例えば、XML編集によって「特定の地形改善が都市に幸福 icon happy;をもたらす」ようにすることは、無印では無理ですがBtSにおいては可能なようです。 「特定の地形改善が都市に衛生 icon health;をもたらす」というのは、無印、BtSともにXMLだけでは不可能のようです。 これはどういうことかというと。 無印では、地形改善が都市に icon health;や icon happy;をもたらす、というのは存在しませんでした。(*24)そしてまた、[[資源・地形改善の編集 ../資源・地形改善の編集]]を見れば分かるとおり、地形改善についての情報がある CIV4ImprovementInfos.xml には、地形改善がもたらす幸福、衛生という項目はありません。 BtSでは「保安林」の地形改善が導入され、地形改善が icon happy;をもたらす場合が存在するようになりました。そこで、XMLの構造も改定され、「この地形改善がもたらす幸福の数 iHappiness 」というタグが新設された、ということのようです。 このように、元のCiv4においてゲームシステム上必要とされているパラメータは大抵、MODにおいてもXML編集で変更・追加が可能ですが、Civ4において必要でないパラメータは、MODでもXML編集だけでは変更できないことが多いです。例外はあります。「その文明が好む宗教」を設定したり、宗教ごとにその効果を変えたり、といった、Civ4では必要とされない概念がXMLだけのMODで実現可能です。 Civ4のXMLで使われるタグは決まっており、どのタグでも規定されていないパラメータは変更できない、というわけです。 たまに、「えっ、こんなこともできないの?」と思うこともありえますが、無いものは無いのです。XMLでの改変はあきらめましょう。 ただし、XML以外の部分も変更するのであれば、話は別です。Pythonスクリプトに手を加えることによって、XMLの解析・それに伴う処理自体を変更してしまえば、新しい概念を作ることができるでしょう。 CustomAssetsで使うMOD この文章では、主にMODSフォルダに入れて「このMODを使う」と意識的に指定するような使い方を想定してきました。 ただ、この使い方では、いちどに1種類のMODしか利用することができません。 インターフェースを改善するMODなど、常に使いたい、他のMODとも併用したいというMODは、CustomAssetsでの使用方法にしたがって、CustomAssetsに入れて利用しましょう。 MODを作る側としては、CustomAssetsでの利用を想定するかしないか決めて、適宜Readme等に書きましょう。 主にCustomAssetsに入れて使うことを想定したMODを作る場合は、MODSフォルダではなく、CustomAssetsフォルダをいったんからっぽにして(今までのCustomAssetsとその内容は別の場所に退避しておく)、そこで作成作業をすると良いでしょう。 フォルダの位置関係は、ドキュメント\My Games\Beyond the Sword(J)\MODS\Nobunaga\Assets\XML のかわりに、ドキュメント\My Games\Beyond the Sword(J)\CustomAssets\xml …という感じになります。(AssetsがCustomassetsに対応) ちなみに、この記事で今まで作ったMODはCustomAssetsでの利用を想定していませんが、小さなMODですから、CustomAssetsに入れてもたぶん動作すると思います。 iniファイル Civ4を起動してMODをロードすると、MOD名フォルダ(例:Nobunaga)直下にiniファイル(例:Nobunaga.ini)が自動的に生成されます。 これはMODを使う際の環境設定ファイルです。今まで説明したような範囲のMODであれば、その内容を指定・編集する必要は特にないと思います。 大型MODで、CustomAssetsとの干渉を嫌う(CustomAssetsを使わせたくない)という場合であれば、 NoCustomAssets = 1 と指定してやるとよいでしょう。 さらなるMOD作りへ これで、語れることはほぼ書きつくしました。「はじめてのMOD作り」なんてタイトルのわりに、けっこう深いところまで来てしまった感じがします。 これまで学んだことを応用すれば、XMLの改変によるMOD作成ならば、かなりのことができるでしょう。例えるなら、我々のMOD技術は古代を終え、中世に入った、というところでしょうか。 しかし、MOD作りへの道はまだはるか遠く。Pythonスクリプトの仕様把握や改変、グラフィック・アニメーションやムービー、音楽、ゲームデザインやバランス調整、などなど、まだまだたくさんのテクノロジーが待っています。 ここから先は、日本語でのノウハウ解説情報がまだ少ないようです。CivFanaticsのMOD作成解説フォーラム など、英語情報を探索する覚悟が必要になってくるでしょう。 「こんなMODを作りたいんだ!」という情熱をもって取り組み続ければ、いつか、Fall from Heaven II や Rise of Mankindのような大作MODを作れるかもしれません。 その時はぜひ、いっしょにゲームを楽しませて下さい! これにて、「はじめてのMOD作り」シリーズは完結です。 ご意見があればコメント欄にお寄せください。もし間違いを見つけたら、勝手に修正していただいても問題ありません、むしろ修正してもらえると助かります。 最後までおつきあい頂き、ありがとうございました。 おわりに 最初は誰でも初心者です。Fall from Heaven IIのような高度なMODと自作品を比べたりせずに、できることからこつこつとやっていった方が結果的に長続きして、よいものが作り出せるでしょう。 本稿とMODスレの皆様の助けを借りて、やっと一人の指導者をまともに動かせるところまでいきました。チュートリアルがより分かり易くなるぶんには損はないと思いますので、途中発生した疑問点など、初心者の視点で分かりづらかった部分を加筆させていただきました。 下記の方は私ではありませんが、「MOD作りの仲間が増えればこれ以上の喜びはありません」とのお言葉、素晴らしいです。-- - これに触発されてMOD作りを初めてみました。ありがとうございます。ところで、この信長を追加したMOD(新建築物との合わせ)を作ってみたのですが、公開してもよろしいでしょうか? -- - コメントありがとうございます。MOD作りの仲間が増えればこれ以上の喜びはありません。MODの再利用・組み合わせ等はご自由にどうぞ。 -- 筆者 - ありがとうございます。早速上げさせさせてもらいました。 →http //wiki.rk3.jp/civ4/fileup/file/400.zip -- - 了解しました。ところで、ここのコメント欄で書き込み操作をすると本文中の「半角の¥」が消えてしまうという現象が起きたため、すみませんがコメント欄を撤去させていただきます。今後、コメントを書きたい方は「編集」でここの後に直接コメントを書き加えるなどしてください。
https://w.atwiki.jp/ssmod/pages/6.html
アーカイブ @wikiのwikiモードでは #archive_log() と入力することで、特定のウェブページを保存しておくことができます。 詳しくはこちらをご覧ください。 =>http //atwiki.jp/guide/25_171_ja.html たとえば、#archive_log()と入力すると以下のように表示されます。 保存したいURLとサイト名を入力して"アーカイブログ"をクリックしてみよう サイト名 URL
https://w.atwiki.jp/vagante_jp/pages/117.html
その他Mod ReduceGoreMod(流血表現軽減MOD) (作者 ちくぼん) このMODを導入することで、ゲーム内の流血表現を軽減することができる。 ※下記の導入方法は「セヤナーえびふらいMOD」を例に説明している為、「流血表現軽減MOD」に読み替えて導入方法を確認しよう。 ダウンロード先 導入方法 RemoveMushroomsMod(きのこ非表示Mod) (作者 ちくぼん) スパイクトラップを覆い隠すキノコを非表示にします。 ※下記の導入方法は「セヤナーえびふらいMOD」を例に説明している為、「きのこ非表示MOD」に読み替えて導入方法を確認しよう。 ダウンロード先 導入方法 BetterJapaneseFontMod(日本語フォント変更MOD) (作者 ちくぼん) Vaganteの日本語フォントをドット調のフォントに変更します。 これにより、Vaganteを日本語化しても、雰囲気を壊すことなく遊ぶことができます。 ※下記の導入方法は「セヤナーえびふらいMOD」を例に説明している為、「日本語フォント変更MOD」に読み替えて導入方法を確認しよう。 ダウンロード先 導入方法 コメント欄 名前 最新40件を表示しています。その他Mod_ログ全文 コメント左側の◯をクリックしてから書き込むと、レス形式でコメントできます。
https://w.atwiki.jp/rulersofnationswiki/pages/63.html
Name(名前) Plural(複数) Gdp(国内総生産) Gdp 2015(2015年国内総生産) Gdp 2030(2030年国内総生産) Gdp 2050(2050年国内総生産) National deficit(国内赤字) Debt(借金) Unemproyment(失業) Population(人口) Growth(成長) Birth rate(出生率) Government type(政府体制)Republic [共和国] Federal republic [連邦共和国] People s Republic [人民共和国] Islamic Republic [イスラム共和国] Monarchy [君主制] Federal Monarchy [連邦君主制] Parliamentary Monarchy [議会制君主制] Islamic Monarchy [イスラム君主制] Federation [連邦] Emirate [首長国] Principality [公国] Unitarian [ユニテリアン] Dependency [属国] Member of the commonwealth [国家構成地域] Palestinian autonomy [パレスチナ自治区] Sovereign state [独立国] Regime type(政権体制) 項目 訳 religious 宗教 parliamentary 国会 presidential 大統領制 semi-presidential 半大統領制 democratic 民主制 authoritarian 独裁 military totalitarian 軍事的全体主義 Title of the head of state(国家元首) 項目 訳 President 大統領 Prime Minister 首相 King 王 Prince 王子 Sultan スルタン Emir アラビア王族・首長 Chancellor 首相(ドイツ等) Governor 知事 Head of government 政府長 Administrator 統治者 Pope (ローマ)教皇 Guide to the Revolution 革命指揮者 Emperor 皇帝 Grand Duke 大公 Supreme leader 最高指導者 Magistrate 行政官 Captain Regent 摂政長? Bailiff 土地管理人? Pres of Council 委員会長 Supreme Guide 最高指導者 Leader of Defense Council 防衛会議長 Leader of Council of state 国策会議長 Pres of Palestinian Authority パレスチナ自治政府長 Main Minister 主大臣 Pres of Regional Council 州議会長 Pres of Territorial Assembly 領土会議長 Pres of General Council 総協議会長 Tltle of the chief executive(行政長) 同上 2ページ目のBrowseにて国旗の変更が可能
https://w.atwiki.jp/civ5dovahkiin/pages/5.html
Modの情報をぼちぼち載せます。 ミスとかあると思いますが生暖かい目でどうか見守って下され。 Mod名 Fearun for BNW 画像 解説 ファンタジー系のMod フォーゴトン・レルムを題材にしているが基本的に元ネタを知らなくても楽しめるファンタジー作品 筆者も元ネタの知識なしで遊んだが全然問題なかった。 勝利方法が社会制度の代わりとなる魔法による魔法勝利(単なる社会制度の名前変更ではなくユニットが使える魔法にも影響) 呪文荒廃による勝利(これは科学による勝利だと思う) 信仰による勝利(他の宗教の聖都を全部制圧すれば勝利 制覇勝利の代わりである) 文化による勝利 ここでは説明しきれないので是非専用解説ページへ!