Mugen 论坛
首页
注册

【IkemenGo】入门教程1:从Mugen到IkemenGo

White
白绝,论坛管理
2022-01-25 05:27:30

从Mugen到IkemenGo

1 前言

IkemenGo是开源的,项目源码目前托管在Github,地址:[K4thos/ Ikemen_GO](https://github.com/K4thos/Ikemen_GO) 和 [Windblade-GR01/Ikemen-GO](https://github.com/Windblade-GR01/Ikemen-GO),作者K4thos并没有在Github上提供编译后的程序,但是Windblade-GR01是有定期更新的。但是如果你需要获取最新的IkemenGo,需要掌握一定的Go语言编译知识,这里不再赘述。

对于一般玩家,我会上传编译后的游戏程序,直接下载即可,地址:[提取码d9bw](https://pan.baidu.com/s/1mtC55Wcic7C7GcfS-1l_qw),本篇教程使用的版本是Windblade-GR01的v0.98.1。

在教程正式开始之前,需要强调的是,Ikemen一直以来都是Mugen最好的克隆版本,而IkemenGo其目前的功能已不是简单通过 `联机版Mugen` 能概括的,在画面包、人物、场景方面它都有很多新的特性。当然最重要的是,它是开源的,意味着它有着根本区别于Mugen的一点,那就是可以不断改进。

在Mugen如今这样已经接近死亡的环境下写这样一个系列的教程,在很多人看来是吃力不讨好,但我依旧能看到有几个人仍然坚持为Mugen做自己的事,这些事完全与圈子无关(事实上属于Mugen的圈子早就支离破碎),只是个人的追求,我同样也有很多残留的想法。总之,这只是一个尝试。

2 文件结构

IkemenGo目前在Mugen原本功能上的支持已经相当完善,所以文件结构和Mugen十分类似,但仍有不同的地方。打开下载的IkemenGo程序,你会看到这样类似这样的目录结构:

  • chars
  • data
  • external
  • font
  • save
  • sound
  • stages
  • IkemenGo.exe(游戏启动程序)

其中 chars、stages、font、sound 和以前一样,分别是储存人物、场景、字体、音乐的目录。关键在于 data 文件夹,这里面增加了很多新的文件,之后我会解释。现在只需注意:mugen.cfg 文件已经不复存在。即IkemenGo的全局配置文件和MUGEN是不一样的,正确的位置是:save/config.json

注意:save/config.json 必须至少启动一次游戏才会生成,原版主程序默认是没有这个文件的

save/config.json 是一个JSON文件,用任何文本编辑器(例如记事本)都能打开,由于其是JSON文件,所以配置格式和原来的 mugen.cfg 是不一样的。不过并不复杂,修改的时候只要注意只修改冒号之后的值内容,不要改变原文本的格式:包括各种冒号、逗号、引号、括号。如果是字符串值,则需要用英文引号包含,如果是逻辑值,则通过0/1或者false/true表示。配置项目的顺序是无所谓的。

这里介绍其中几个常用的配置项目:

    "Motif": "data/system.def",

最重要的配置项,指定你的画面包 system.def 文件,与之前 mugen.cfg 是类似的。很多人不知道的是,IkemenGo官方其实提供了几个Mugen原版的画面包,只要没有被人为删除,可以修改这个字段为下列的任何一个值来更换:

  • data/system.def
  • data/mugen1/system.def
  • data/big/system.def
  • data/kfm/system.def
    "DebugClipboardRows": 2,
    "DebugClsnDarken": true,
    "DebugConsoleRows": 15,
    "DebugFont": "font/default-3x5-bold.def",
    "DebugFontScale": 1,
    "DebugKeys": true,
    "DebugMode": true,
    "Difficulty": 8,

从上到下是:Debug剪贴板最大行数、CLSN变暗、Debug控制台输出最大行数、调试文本字体、调试文本字体大小比例、是否开启调试快捷键、是否开启调试模式、游戏难度。

    "Fullscreen": false,
    "GameWidth": 1280,
    "GameHeight": 720,
    "GameFramerate": 100,
    "Framerate": 60,

从上到下是:是否全屏、分辨率宽、分辨率高、游戏速度、游戏帧率。注意:如果你使用的是0.98.0之前的版本,那么游戏速度的字段应该为 GameSpeed

    "MaxAfterImage": 128,
    "MaxBgmVolume": 100,
    "MaxDrawGames": -2,
    "MaxExplod": 512,
    "MaxHelper": 56,
    "MaxPlayerProjectile": 256,

这部分是性能相关的,和原来Mugen的配置一样,我就不解释了,区别是IkemenGo里这些配置都是没有上限的,比如Helper数量可以高于56从而解人物决变量不够用的问题,但是在这个局限上IkemenGo给出了更好的办法,这将在人物部分解释。

    "NumSimul": [        2,        4    ],
    "NumTag": [        2,        4    ],
    "NumTurns": [        2,        4    ],

这部分指定了Simul、Tag(IkemenGo新增)、Turns模式下的人数,第一个数字指定最低人数,第二个数字指定最高人数。

"KeyConfig": [
    {
    "Joystick": -1,
    "Buttons": [
    "w",
    "s",
    "a",
    "d",
    "j",
    "k",
    "l",
    "u",
    "i",
    "o",
    "h",
    "q",
    "e",
    "m"
    ]
    },
    {
    "Joystick": -1,
    "Buttons": [
    "UP",
    "DOWN",
    "LEFT",
    "RIGHT",
    "1",
    "2",
    "3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    "0"
    ]
    },

这部分指定了1P和2P的键盘键位设置,但是不推荐在这个文件里直接改,建议在游戏内的 Options 页面的 Input Settings 修改,修改后在设置界面首页选择 Save and Return 保存即可。

	"RoundTime": 99,
	"ScreenshotFolder": "",
	"StartStage": "stages/stage0-720.def",
	"System": "external/script/main.lua",
	"Team1VS2Life": 150,
	"TeamDuplicates": true,
	"TeamLifeShare": false,
	"TeamPowerShare": true,
	"TrainingChar": "chars/training/training.def",

从上到下是:对局时间、截图保存目录、默认启动场景、系统Lua文件(一般玩家不用管)、1V2时的生命值比例、团队人物是否可以重复、团队是否共享生命、团队是否共享能量、训练人物(后续解释)。这里注意 StartStage 和 TrainingChar 指定的场景和人物一定要保证存在。

3 模式变化

IkemenGo在玩法方面也增加了很多内容,即游戏模式增加了,至少包含以下模式:

  • 街机模式:包含个人街机模式(ArcadeMode)、团队街机模式(TeamArcade)、协作街机模式(ArcadeCoop)
  • 对战模式:包含个人对战模式(VersusMode)、团队对战模式(TeamVersus)、协作对战模式(VersusCoop)
  • 生存模式:包含个人生存模式(Survival)、协作生存模式(SurvivalCoop)
  • 快速比赛(FreeBattle):用于玩家练习技术,可以自由选择个人还是团队模式
  • 故事模式(StoryMode):游戏剧情由游戏作者制作,并由玩家选择故事进行
  • 联机模式:包含联机对战模式(NetplayVersus)、联机协作街机模式(NetplayArcadeCoop)、联机协作生存模式(NetplaySurvivalCoop)
  • 随机对战模式(Randomtest):和观战模式类似,但是会自动随机选择人物,记录对战结果并按表现为人物分级。
  • 训练模式(Training)
  • 观战模式(WatchMode)
  • 录像模式(Replay)
  • 其他模式:TimeAttack、BossRush、BonusGames

游戏模式的增加,也导致了游戏配置字段的增加,这些将在后面涉及。

4 画面包迁移

接下来开始介绍如何将Mugen的资源迁移到IkemenGo。

IkemenGo在设计上是兼容绝大部分的Mugen1.X的特性,但不会保留Mugen中过时或者错误的历史残留。这部分可以参考原作者的话:

> Ikemen GO aims for full compatibility with characters, stages, storyboards, lifebars and screenpacks released for Mugen 1.0 and Mugen 1.1 (official engine releases). When it comes to Winmugen content the compatibility is meant to be at the same level as Mugen 1.1 (we're not aiming for better backward compatibility than mugen itself does). If something doesn't work it means that either the content itself is buggy (Ikemen Go engine and scripts are less tolerant for wrong syntax compared to mugen) or it's a compatibility issue that should be [reported here](https://github.com/Windblade-GR01/Ikemen-GO/issues) (if ticket for particular issue doesn't exist yet).

Mugen的画面包,直接复制到IkemenGo的话是会报错的,原因主要是因为Ikemen支持了更多新的特性,这部分特性所需的配置在Mugen的画面包中是缺少的,因此会导致报错。解决的方法也很简单,只需要将这部分缺少的配置添加进去即可。IkemenGo的作者也提供了几个画面包作为范例,基本都是由Mugen官方主程序迁移而来,这些文件展示了IkemenGo的一个正常的画面包需要定义哪些东西。

这些范例文件包括(你可以在下载的IkemenGo中找到这些文件):

  • data/select.def : Select文件范例
  • data/system.def : Win版主程序240p画面包范例
  • data/mugen1/system.def : 1.0主程序720p画面包范例
  • data/big/system.def : 1.0主程序720p画面包(多格子)范例
  • data/fight.def : Win版主程序血条范例
  • data/mugen1/fight.def : 1.0主程序血条范例

一个简单的迁移思路是:参照这些范例文件,将Mugen的内容复制过来替换这些范例文件中的Mugen部分,保留IkemenGo新增的部分,就能把画面包迁移过来了,对于后面的血条同样如此。不过,完美的迁移却需要保证在替换的过程中不影响原来IkemenGo新增的部分以及新增的部分不影响迁移过去的部分,这是一件更复杂的事,所以在本次教程,我们并不考虑这个问题,这意味着按本文方法迁移过后,即使原画面包的内容完全迁移过来了,也可能会出现新的并不来自于原画面包的问题,事实上对IkemenGo新增部分造成影响的几率接近于100%,不过大部分情况下这些影响是无伤大雅的。

> 对完美迁移感兴趣的人,这里提供两个方法,第一是可以在手动替换时注意IkemenGo新增特性代码所使用的图像、动画、字体,并将这些资源添加进你的画面包中,保证不会和原画面包的资源混淆。第二个是可以在手动替换时,将IkemenGo新增特性代码的某些字段置空或者置不合理值,使它们暂时“失效”。这两个方法都可以避免大部分的问题,剩下的则可以通过不断的修改代码来解决。

之后,为了实现完美迁移,并降低这一操作的门槛,我计划用C#编写一个迁移工具,可以傻瓜化地将Mugen画面包迁移到IkemenGo,这个工具应该是开源的。但在此工具发布之前(取决于反馈,也许永远不会发布),你只能使用这个不完美的手动的方法,暂时回归Mugen爱折腾的那一面。

为了更方便地进行手动迁移,我按1.0主程序720p画面包的范例文件整理出了一个模板,这个模板用中文标注了哪部分是Mugen原先的内容,即你可以直接从原画面包复制过来的,也标注了哪部分是IkemenGo新增的内容,即你无需修改的。

这个模板文件可以在此处下载:[提取码d9bw](https://pan.baidu.com/s/1mtC55Wcic7C7GcfS-1l_qw)

首先下载这个模板文件 `system.def` ,可以发现其中的标注格式有:

;——————————此部分与原Mugen一致,可直接复制——————————
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;—————————————————————————————————————————————————

;~~~~~~~~~~~~~~~此部分为IkemenGo新特性~~~~~~~~~~~~~~~~~~~~
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

第一种标注内容,是在原Mugen中的 `system.def` 画面包文件中可以找到原文的,只需要将原文复制过来替换即可;

第二种标注内容,是IkemenGo新增的内容,这部分内容保持不动即可。

只要完成所有的替换,那么就差不多是适合IkemenGo使用的 `system.def` 了。但是还有一步,那就是菜单定义。在模板文件中,可以看到下面这部分内容:

;~~~~~~~~~~~~~~~此部分为IkemenGo新特性~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~此部分为菜单定义,请根据教程修改~~~~~~~~~~~~~~~~~~
menu.itemname.menuarcade = "ARCADE"     
menu.itemname.menuarcade.arcade = "SINGLE MODE"
menu.itemname.menuarcade.teamarcade = "TEAM ARCADE"
menu.itemname.menuarcade.teamcoop = "TEAM CO-OP"
menu.itemname.menuarcade.back = "BACK"  

menu.itemname.menuversus = "VS MODE"
menu.itemname.menuversus.versus = "1P VS 2P"
menu.itemname.menuversus.teamversus = "TEAM VERSUS"
menu.itemname.menuversus.versuscoop = "VERSUS CO-OP"   
menu.itemname.menuversus.freebattle = "QUICK MATCH"  
menu.itemname.menuversus.back = "BACK"  

menu.itemname.storymode = "STORY MODE"  
; story arcs menu items are automatically added before storymode.back
menu.itemname.storymode.back = "BACK"   

menu.itemname.menunetwork = "NETWORK"   
menu.itemname.menunetwork.serverhost = "HOST GAME"   
menu.itemname.menunetwork.serverjoin = "JOIN GAME"   
menu.itemname.menunetwork.back = "BACK"  

menu.itemname.menunetwork.serverjoin.joinadd = "NEW ADDRESS" 
menu.itemname.menunetwork.serverjoin.back = "BACK"  

menu.itemname.server.netplayversus = "VERSUS 2P"  
menu.itemname.server.netplayteamcoop = "ARCADE CO-OP"   
menu.itemname.server.netplaysurvivalcoop = "SURVIVAL CO-OP" 
menu.itemname.server.back = "EXIT"     

menu.itemname.menupractice = "PRACTICE"  
menu.itemname.menupractice.training = "TRAINING"  
;menu.itemname.menupractice.trials = "TRIALS"  
menu.itemname.menupractice.back = "BACK"  

menu.itemname.menumission = "MISSION"  
menu.itemname.menumission.timeattack = "TIME ATTACK"  
menu.itemname.menumission.survival = "SURVIVAL"
menu.itemname.menumission.survivalcoop = "SURVIVAL CO-OP"
menu.itemname.menumission.bossrush = "BOSS RUSH"  
menu.itemname.menumission.vs100kumite = "VS 100 KUMITE"  
menu.itemname.menumission.timechallenge = "TIME CHALLENGE"
menu.itemname.menumission.scorechallenge = "SCORE CHALLENGE" 
menu.itemname.menumission.bonusgames = "BONUS GAMES"  
menu.itemname.menumission.back = "BACK"   

; bonus characters menu items are automatically added before bonusgames.back
menu.itemname.menumission.bonusgames.back = "BACK"   

menu.itemname.menuwatch = "WATCH MODE"  
menu.itemname.menuwatch.watch = "CPU MATCH"
menu.itemname.menuwatch.randomtest = "RANDOMTEST"  
menu.itemname.menuwatch.replay = "REPLAY"  
menu.itemname.menuwatch.back = "BACK"    

menu.itemname.options = "OPTIONS"
menu.itemname.exit = "EXIT"
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

这部分内容是定义主界面菜单的,因为上面说了IkemenGo支持更多的游戏模式,并且由于子菜单组的支持,这里的字段名发生了变化,所以不能直接将Mugen的代码复制过来。

如果你对菜单无所谓,可以接受IkemenGo默认的英文菜单,那么这一步也可以不做,直接快进到下一步就行。

如果你想自己定义菜单,例如实现中文菜单,也很简单,只需要按照上面的字段,把英文替换为中文或者其他你想要的文本即可。如果不想开启这个模式,可以留空。和Mugen的区别在于:这里的菜单更多了,而且有层级关系,这部分你进游戏体验一下就明白了。

至此,`system.def` 的迁移完成,别忘了在 `config.json` 中的 `Motif` 指定,并且正确修改 `GameWidth `和 `GameHeight`

然后就是将其他画面包相关文件迁移到IkemenGo,下面这些文件直接复制即可:

  • 人物(chars)
  • 场景(stages)
  • 字体(font)
  • 音乐(sound)
  • 故事板(StoryBoard)
  • system.sff
  • system.snd
  • select.def

复制人物、场景、字体文件夹时,不要删除IkemenGo原来文件夹的内容(建议直接复制,合并且覆盖),否则可能会导致报错,因为其中有一些是主程序内部用到的。此处不细说。

但是有一个东西是不能直接复制的,那就是血条文件,需要修改后才能用于IkemenGo。

不过我们仍然可以看看画面包当前迁移的效果,只需要修改 `system.def` 下面这个字段:

fight = fight.def  

将它们指定为IkemenGo自带的血条的 `fight.def `即可。

5 血条迁移

关于血条的迁移。这里我同样准备了一个模板文件 `fight.def` ,依旧是此处下载:[提取码d9bw](https://pan.baidu.com/s/1mtC55Wcic7C7GcfS-1l_qw)

按与画面包迁移同样的方法进行替换,然后在 `system.def` 指定修改后的血条,并复制该血条所用到的SFF、SND和字体文件即可。

6 下一步

本篇教程到此就结束了,其实几乎没有涉及IkemenGo的新功能。想要理解IkemenGo的魅力去更好的使用它,或者只是为了更好的迁移Mugen资源,你不得不去了解并学习IkemenGo的新特性,这将在下一篇教程介绍。