gambatte游戏男孩颜色模拟器的终端前端
项目描述
gambatte-terminal
gambatte的终端前端,游戏男孩颜色模拟器。
它支持
- 16色,256色和24位色终端
- 从模拟器播放音频
- 使用TAS输入文件作为游戏输入
- 使用键盘按键作为游戏输入
安装
Linux,Windows和macos上提供python 3.6,3.7,3.8和3.9的轮子
$ pip3 install gambaterm
使用和参数
使用
usage: gambaterm [-h] [--input-file INPUT_FILE] [--frame-advance FRAME_ADVANCE] [--break-after BREAK_AFTER] [--speed-factor SPEED_FACTOR] [--force-gameboy]
[--skip-inputs SKIP_INPUTS] [--cpr-sync] [--disable-audio] [--color-mode COLOR_MODE]
ROM
位置参数
-
ROM
GB或GBC rom文件的路径
可选参数
-
--input-file INPUT_FILE, -i INPUT_FILE
bizhawk BK2输入文件的路径
-
--frame-advance FRAME_ADVANCE, --fa FRAME_ADVANCE
运行下一个帧之前的帧数(默认为1)
-
--break-after BREAK_AFTER, --ba BREAK_AFTER
在强制模拟器停止之前运行的帧数(默认不停止)
-
--speed-factor SPEED_FACTOR, --sf SPEED_FACTOR
应用于模拟的速度因子(默认为1.0对应60 FPS)
-
--force-gameboy, --fg
强制模拟器将rom视为GB文件
-
--skip-inputs SKIP_INPUTS, --si SKIP_INPUTS
跳过帧输入的数量以补偿BIOS的缺乏(默认为188)
-
--cpr-sync, --cs
使用CPR同步来防止视频缓冲
-
--enable-controller, --ec
启用游戏控制器支持
-
--disable-audio, --da
完全禁用音频
-
--color-mode COLOR_MODE, -c COLOR_MODE
强制颜色模式(1:4灰度颜色,2:16颜色,3:256颜色,4:24位颜色)
SSH服务器
可以通过SSH提供模拟,尽管客户端没有X服务器和ssh -X
选项将无法向模拟器发送输入。使用gambaterm-ssh --help
获取更多信息。
终端支持
并非所有终端都能提供愉快的体验。主要标准包括
-
支持基本的ANSI代码(VT100) 更具体地说,设置背景/前景颜色以及移动光标(绝对和相对)。这些通常都支持。
-
支持至少256种颜色 这些通常都支持。16种颜色也可以工作,但看起来不太好。在这种情况下,最好使用灰度颜色,使用
--force-gameboy
或--color-mode=1
。 -
支持UTF-8和良好的Unicode块元素渲染 更具体地说,以下字符
▄ █ ▀
。此外,对齐可能不准确(例如像素之间的小空隙)。这并不总是得到良好的支持。 -
良好的渲染性能 终端必须能够每秒处理大约500KB的请求,以实现“强烈”帧的流畅渲染。通常,最强烈的帧发生在两个详细场景的屏幕转换期间。
下表总结了我尝试最常用的终端模拟器时的发现。以下是关于Linux的内容
Linux | 状态 | 颜色 | Unicode渲染 | 性能 | 评论 |
---|---|---|---|---|---|
GNOME终端 | 优秀 | 24位颜色 | 良好 | 60 FPS | |
Terminator | 优秀 | 24位颜色 | 良好 | 60 FPS | |
Kitty | 优秀 | 24位颜色 | 良好 | 60 FPS | |
XTerm | 良好 | 24位颜色 | 良好 | 60 FPS | 没有调整大小快捷键 |
Termit | 一般 | 24位颜色 | 良好 | 60 FPS | 没有窗口标题 |
Rxvt | 一般 | 256种颜色 | 良好 | 60 FPS | 没有调整大小快捷键 |
Mlterm | 一般 | 24位颜色 | 轻微对齐错误 | 60 FPS | 没有调整大小快捷键 |
Terminology | 一般 | 24位颜色 | 可能的对齐错误 | 30 FPS | 奇怪的颜色 |
关于MacOS
MacOS | 状态 | 颜色 | Unicode渲染 | 性能 | 评论 |
---|---|---|---|---|---|
iTerm2 | 良好 | 24位颜色 | 良好 | 30 FPS | |
终端 | 无法玩 | 256种颜色 | 对齐错误 | 20 FPS |
关于Windows
Windows | 状态 | 颜色 | Unicode渲染 | 性能 | 评论 |
---|---|---|---|---|---|
Windows终端 | 不愉快 | 24位颜色 | 良好 | 30 FPS | 显示错误 |
Cmder | 无法玩 | 24位颜色 | 良好 | 2 FPS | 没有窗口标题 |
Terminus | 无法玩 | 24位颜色 | 对齐错误 | 10 FPS | |
命令提示符 | 损坏 | N/A | N/A | N/A | 不支持ANSI代码 |
Git bash | 损坏 | N/A | N/A | N/A | 与winpty不兼容 |
终端大小
模拟器使用屏幕上的单个字符来显示两个垂直对齐的像素,如下所示 ▄▀
。由于Gameboy的宽度为160像素,高度为144像素,因此您需要将终端设置为至少160个字符宽,72个字符高才能显示整个屏幕。将终端设置为全屏通常就足够了,但您可能需要调整字符大小,通常使用 ctrl - / ctrl +
或 ctrl wheel
快捷键。
键盘、游戏控制器和文件输入
默认启用了键盘控制,而游戏控制器控制必须使用 --enable-controller
或 --ec
启用。目前无法配置按键绑定
按钮 | 键盘 | 控制器 |
---|---|---|
方向 | 箭头 | 左帽/左棒 |
A | F / V / Space | 按钮0/按钮3 |
B | D / C / Alt | 按钮1/按钮2 |
开始 | 右Ctrl/Enter | 按钮7 |
选择 | 右Shift/删除 | 按钮6 |
键释放,通常对于玩游戏是必需的,不能通过 stdin
检测到。然后需要访问窗口系统来获取按键。这有几个问题
-
检测与终端对应的窗口可能很困难。对于X11,最佳解决方案是查找当前聚焦的窗口。对于其他系统,后备解决方案是使用全局热键。
-
它仅通过使用
ssh -X
的客户端与具有X服务器的SSH进行工作,这意味着Windows和MacOS用户必须运行X服务器。此外,与不信任的服务器连接使用-X
是一个坏主意。 -
可能需要额外的权限来访问窗口系统,特别是在MacOS上(参见 此指南)
还可以使用bizhawk BK2输入文件,通过使用 --input-file
(或 -i
)选项来玩辅助速度运行。
动机
说实话,使用这款Gameboy模拟器并没有真正的原因,除非你可能会觉得它很有趣。这个项目的动机只是尽可能地将视频游戏机模拟器在终端中运行的想法推到极致。似乎已经有一个类似的尝试,它使用了不同的方法来显示视频流。无论如何,我对这个项目非常满意,也有些惊讶,我能够将它推进到玩游戏实际上很有趣的程度。特别是,我已经在XTerm中以60 FPS完成了《弹跳球》,现在我正在期待玩更多自制游戏 :)
依赖项
以下是本项目使用的依赖项列表,所有都是非常优秀的开源库
- gambatte - Gameboy模拟
- Cython - 与gambatte C++ API的绑定,以及快速的视频帧转换
- prompt-toolkit - 跨平台终端处理
- samplerate - 重采样音频流
- sounddevice - 播放音频流
- xlib/pynput - 获取键盘输入
- pygame - 获取游戏控制器输入
- asyncssh - 运行SSH服务器
联系方式
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
gambaterm-0.12.7.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8ae9ad128942b4ec8bba06a2228137b579c1968b8b540f9afef1cd3779dd8e7c |
|
MD5 | 884e6e4ae210057237d19e8cc862b733 |
|
BLAKE2b-256 | 9d42e000e3005568aa6ab3c4a462c7b23d2d60cc56d4c5429700283a35d400c8 |
散列 用于 gambaterm-0.12.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b46303d1a07a59416ef5ab0e53a4f7dd20b042bffd7092bb896065563b0ef5d2 |
|
MD5 | 9ab2c920cc4c85904a8946a124f1e603 |
|
BLAKE2b-256 | f34eecfafc40a9eb55ca6490e3552aef8c71319b75f69fc03e81aaa13a06767e |
散列 用于 gambaterm-0.12.7-cp312-cp312-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | da0ff0c588f69c124b3ed975b24353ea1c8cd8f81888845bdcb10f1a882731b5 |
|
MD5 | e1885aa4f1a557d52fe7129ee03eee36 |
|
BLAKE2b-256 | 9bc155075639c807dce1f99b70d7a193de4c0272a9fcebce6a98367eb2a2b797 |
散列 用于 gambaterm-0.12.7-cp312-cp312-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 835107401d24610563d82b03a46e2b69449112cc120be8bc3f52e296dd22ea6d |
|
MD5 | bf0fc34985d04a0f01078c3a44a356d7 |
|
BLAKE2b-256 | f2e1e9e718951236578208a3ceae976bdd73762a00dbe6eeb7cead3de7ab0c2a |
散列 用于 gambaterm-0.12.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a9e9950f4313103f0889004c6903467d76f6a16408ef2c5f01ed8ccc92edc488 |
|
MD5 | 359c95abfae416827749ee35bd4f74a3 |
|
BLAKE2b-256 | 23889900883342e63a3c3dc08b835ed166c4771c2f6f556b1acdcdf89f388588 |
散列 用于 gambaterm-0.12.7-cp311-cp311-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0a4ace625c870e997a6e00ec86e50d65aeb977b11a321730455d7f57f8d5727a |
|
MD5 | 730f76e7c7a2c7a034a6e5e79edd1b60 |
|
BLAKE2b-256 | d8bda780e414f1fcb58cab983635500db7c969eee46082c4fdd4d387a90b0620 |
散列 用于 gambaterm-0.12.7-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9e3776fb081b8c106d816bb6aac04e1939f2c90afb191825a18853ee9bfe64b7 |
|
MD5 | b4355b02c0bcb34bb5565ece2882494f |
|
BLAKE2b-256 | 351cf4685e56fbaf5ef6ffad6e75596b3555e93dc2bff0202ace454b5ccf7946 |
散列 用于 gambaterm-0.12.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0a6fc6d9143ba4458423d66a0ba60142378962bfa99a31955a9ed14c6ee3b963 |
|
MD5 | e0566c87914d8a9e509a4b17d8480a3a |
|
BLAKE2b-256 | 2aedc94c11286925c4b0acfb11f51d221042497ea1066068f59c0516fb6223ed |
散列 用于 gambaterm-0.12.7-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 584e94f4a16b398547797221f87d1c141b5d6036d6aa7b46d8a674b1920666e8 |
|
MD5 | ac051d58007569c81f8c2deb263dc4f3 |
|
BLAKE2b-256 | 02cbd97ebbc1ce921ecb23da288a4c108bd1c18adb150ebd1eee8bff000bb57c |
散列 用于 gambaterm-0.12.7-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2f24f776791b4f6d6c8223ca0b160a2c678a4eaeb61e64e6c4aac3945de7fb38 |
|
MD5 | 91e6871e8d7b12e8bd10ca8d08995beb |
|
BLAKE2b-256 | b763306aed33559f398d1fa38beda6c73ab77870ac9ef3d4a3e3c9aa03b22e1f |
哈希值 用于 gambaterm-0.12.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cacf3f13a4f0318da94a5c9ff65f412a8a125e9db17553c2db4e5d333a88e53b |
|
MD5 | cac59631b9931393ed57a1a5651ee0ef |
|
BLAKE2b-256 | 803444b2ca25bdb9c6dd92980ed6b562293858e9aca0079c2d609bff646336b7 |
哈希值 用于 gambaterm-0.12.7-cp39-cp39-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fe59dbbaa26d5d4462fa411bea414ad0ce68a93fdef90c3f4cd0609e0e4b53f5 |
|
MD5 | 89f84b94302067764466c4569c8fa9c7 |
|
BLAKE2b-256 | 47e29f13afa3fb96dcd27b467aa6a479c8d2439820650a722720e32fee78315a |
哈希值 用于 gambaterm-0.12.7-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e2d1451c3056b37b1ffff533f18b2fc3eb7ede04823f626ff219e6a72579416f |
|
MD5 | ce592be487a20b1dbac6dc26040d1b2c |
|
BLAKE2b-256 | 914be1882797a1e7e3ac88fa29f5fa955623ba32c877dd557daffc1bfba5d321 |
哈希值 用于 gambaterm-0.12.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ca93d872a2f2e457e7250f165493ae08ec6df402874050fb9388fbaeb10b69ee |
|
MD5 | 66e36f199e6da4f659f31f28d5ce52ef |
|
BLAKE2b-256 | 8badc078a334fbf2fbec06ed85ad421ca5ef9ab736da51dc0015af6b9938113f |
哈希值 用于 gambaterm-0.12.7-cp38-cp38-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 93dbba9cc7fc18538dc984cb81798bd024ed2bd3247d64a115992463cb37a389 |
|
MD5 | 4dae527da7f23bd004522b9c0b740454 |
|
BLAKE2b-256 | 957bc0ebaf38a89c4b8c3e9c73d429991a640312430654f6c59d328b74e53582 |
哈希值 用于 gambaterm-0.12.7-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bd885e36f75e9a9b54df8341a8cda027381fc74f432d0d504b8fc8372b99fb87 |
|
MD5 | 23def6a30dbf3bda9b74e81c1cdd6122 |
|
BLAKE2b-256 | cf01f17be839fd19377abccbcd2c32dbbc239696bfd574a051684a705f26b775 |
哈希值 用于 gambaterm-0.12.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 72f13ee1e58bdc47ed62547f9234483ebcb7a26aa106b95060cf45fbe46e4d24 |
|
MD5 | c8792dbfc5857fe2c59a8ca520f9f0a7 |
|
BLAKE2b-256 | 31900527b004c33780efd2f10fab08daf363af9a96e3032070bebe6d9934b8b3 |
哈希值 用于 gambaterm-0.12.7-cp37-cp37m-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 70839cdbc939775493a4fd70a80bce05a0a2effe6c6c6f4b52c18fcbd89cb9c5 |
|
MD5 | 0b97f64d65782c442947f9a21c95eab0 |
|
BLAKE2b-256 | b6fe612ce3b3df7915fc5cae756ba3f67c22aaddbd41e3bc4cbb315031518be7 |