linux 运行魂斗罗,如何在linux/freebsd下玩模拟器游戏_linux教程

如果你生于70年代,那么你一定还记得《魂斗罗》、《战斧》、《名将》吧。想再听一次令人热血沸腾的《魂斗罗》的主题曲吗?好,现在就让我们重温我们的儿时之旅。

我们的讨论范围包括任天堂红白机模拟器(Fceu),世嘉五代模拟器(DGen/SDL),和街机模拟器(Xmame),有同好愿意帮助补上其他模拟器的资料吗?

Fce Ultra

这是一个跨平台的任天堂红白机模拟器,可以运行在Dos/Windows/BeOS/MacOS/MacOSX/和Unix下(需要SDL库支持)是我用过的Linux/FreeBSD下最好的红白机模拟器,支持绝大部分常见的MAP格式,支持zip格式的压缩rom、全屏模式、网络联机、游戏杆输入,甚至游戏作弊。遗憾的是作者似乎不打算继续发展这个项目,然而你仍然可以在http://fceultra.sourceforge.net/files/ 下找到该模拟器不定期发表的最新版本,目前的最新版本为0.96。

编译安装这个模拟器是一件相当简单的事:下载fceu096src.tar.gz,展开到一个临时目录下,进入该目录,将Makefile.unixsdl拷贝成Makefile,然后运行make,如果一切顺利,将在该目录下生成fceu的执行程序。在指令行输入”$ ./fceu”将得到指令行帮助,试试”$ ./fceu -fs contra.zip”,看到你久违的《魂斗罗》画面了吗?”-fs”选项将使fceu在全屏幕方式下运行。

Fce ultra假定axis0为游戏杆的X轴向,axis1为游戏杆的Y轴向,对于大多数Gameport游戏杆,这个假设是成立的,但我的Topway USB Joypad单人手柄向系统报告自己是一个4轴向游戏杆/20按键手柄(实际使用2轴向10 按键),axis2为x轴向,axis3为Y轴向,有效按键0-9。这可能是由于Game-pad制造商为了减少成本,让单人手柄与双人手柄共用芯片的结果,而我的Gamtec Twin USB Game-pad双人手柄同样报告自己是一个4轴向/20按键手柄,其中axis0为Player1的X轴向,axis1为Player1的Y轴向,axis2为Player2的X轴向,axis3为Player2的Y 轴向,手柄1的有效按键为0-9,手柄2的有效按键为10-19。是的,这个结果看起来相当的怪诞,但这不是厂商或是驱动编写者的错,毕竟,支持Joystick重映射应当是应用程序的职责,但这却造成相当一部分USB游戏杆在 Fce Ultra下无法正常使用,有哪位红白机迷愿意为她写个补丁吗?

Linux用户在编译运行之前应当先检查是否已安装了SDL的运行库和开发库(当然还要有gcc)。Redhat/Mandrake的发行版均有这个安装包,你可以运行 “sdl-config –version”来检查你的SDL库的版本号,确保你的SDL库版本在1.1以上,否则在编译时可能会遇到麻烦。

FreeBSD用户需要确保sdl12 (/usr/ports/devel/sdl12),gmake (/usr/ports/devel/gmake)等ports已经安装,sdl12会在/usr/local/bin/下安装sdl11-config这个执行文件,由于FreeBSD的ports包含了许多不同版本的SDL库(甚至包括在linux模拟环境下运行的linux-sdl),因此需要以不同的配置程序名加以区别。记住为sdl11-config创建一个符号连接,像这样:”# cd /usr/local/bin; ln -s sdl11-config sdl-config”,fceu编译时需要通过这个标准的SDL环境配置程序以确定所需的SDL库和头文件的路径,另外,你需要执行”gmake”以明确表示你使用gnu-make而不是系统缺省的bsd-make

在写完这个主题后大约一个星期,我兴奋地发现,FreeBSD终于将FCEU正式加入了PORTS,如果你使用cvsup 同步PORTS,那么进入”/usr/ports/emulators/fceu”,然后”make && make install”就大功告成了。

DGen/SDL

这是基于windows的世嘉模拟器DGen的SDL环境移植版,支持全屏模式、分屏模式、zip格式的压缩rom、游戏杆输入和游戏作弊,你可以在http://www. pknet.com/~joe/dgen-sdl.html找到该模拟器的最新版本,目前的最新版本是1.23。

与Fce Ultra一样,DGen/SDL同样不支持游戏杆重映射,甚至假定系统报告的第一游戏杆设备为Player1,第二游戏杆设备为Player2,并且限制游戏手柄的最大按键数为16!但SEGA MD上留下了我太多难以割舍的回忆,因此我为她编写了游戏杆重映射的PATCH,由于DGen/SDL 原本的游戏杆支持的代码是由另一位hacker加上的,并且使用了完全不同的事件映射模式,这花了我2个小时去弄清楚代码是如何工作的,这个补丁耗费了我整个周末并让我错过了与PPMM的晚餐:-< 然而应用这个PATCH是非常简单的,你只需在展开的dgen-sdl-1.23目录下执行”patch-p1<.. patch>

得益于autoconf脚本的帮助,编译模拟器的源代码是相当简单的,下载dgen-sdl-1.23.tar.gz,展开到一个临时目录,进入该目录,如果你需要游戏杆重映射的Patch,请先按上文的方法应用Patch,之后顺序执行”./configure”,”make”就可完成编译,FreeBSD的用户则需要首先符号连接sdl-config,安装gnumake,并执行”gmake”而不是”make”。然而该版本的autoconf测试宏中有两处错误地包含了SDL/SDL.h而不是SDL.h,在Redhat Linux下,由于SDL-devel将SDL的头文件放在了/usr/local/SDL/下,而/usr/include/是系统的标准包含路径,因此,Redhat的用户在编译时不会遇到任何麻烦,其他Linux发行版和*BSD的用户恐怕就没这么幸运了,当你运行”./configure”时,配置脚本会抱怨找不到SDL/SDL.h这个头文件从而引起SDL环境测试失败,你可以修改acinclude.m4和aclocal.m4这两个宏定义文件然后重新运行autoconf以生成configure 脚本或是干脆自己直接修改configure脚本。

如何使用PATCH提供的游戏杆重映射功能?

你可以按照sample.dgenrc文件中给出的例子修改游戏杆的映射以适应你的要求,这是一个我的游戏杆设置的例子:

# joy_pad1_up = j0a1(-16384) 表示Player1的上方向设为游戏杆设备0的第1轴。

# 向的负方向,只有当该方向的轴向位置绝对值超过16384时,才认为该事件发生。

# 这个设置让你可以避免游戏杆传回的噪音信号干扰你对游戏主角的控制,对于。

# 飞行摇杆类的游戏杆(如Logitech WingMan 3D)是一个很有用的设置,轴向位置。

# 绝对值的取值范围是1~32767。

joy_pad1_up = j0a1(-16384)

joy_pad1_down = j0a1(+16384)

joy_pad1_left = j0a0(-16384)

joy_pad1_right = j0a0(+16384)

# joy_pad1_a = j0b3表示Player1的A键被定义为游戏杆设备0的第3按钮。

joy_pad1_a = j0b3

joy_pad1_b = j0b0

joy_pad1_c = j0b1

joy_pad1_x = j0b2

joy_pad1_y = j0b6

joy_pad1_z = j0b7

joy_pad1_mode = j0b9

joy_pad1_start = j0b8

在Linux下,你可以通过jstest的输出以确定该如何填写配置项,一个类似于GXMAME的图形化前端会使这一工作简单许多,有谁对这个主意感兴趣吗?

这个PATCH可以在Linux下完美地支持各种游戏手柄,然而在FreeBSD上使用UHID手柄时却响应缓慢,这可能是FreeBSD的UHID驱动传回了大量的噪音信号导致的,但XMAME-0.70.1却能在这样的噪声信号下正常处理游戏杆输入,我是FreeBSD的忠实FANS,然而我并不在意FreeBSD的这些不是很”UNIX”的特性,个人认为与其继续修改模拟器以适应FreeBSD下的噪音环境,还不如修改FreeBSD的UHID驱动,毕竟一件这样的工作的有趣程度取决于对社会幸福总量的贡献:-D,如果你是FreeBSD的FANS,那么UHID驱动入口是个不错的开始,你可以在/usr/src/sys/dev/usb/uhid.c找到她。

XMAME

所有的MAME Fans请起立,注视这个LOGO并高呼3声M

你可能感兴趣的:(linux,运行魂斗罗)