用于游戏模拟器同步的联机.Net实现
Go to file
2024-09-13 13:52:37 +08:00
AxibugEmuOnline.Client fixed netreplay 2024-09-13 13:52:37 +08:00
AxibugEmuOnline.Server 服务器当前帧 2024-09-13 13:41:04 +08:00
AxibugEmuOnline.Web WebApi 检查版本和获取服务器IP 2024-09-12 14:35:44 +08:00
etc nes游戏数据库 2024-07-16 10:59:01 +08:00
Lib 归档 2024-06-28 17:43:55 +08:00
OtherCore/MyNes.Standard2 MyNes Standard2.0 核心归档 2024-07-24 15:03:33 +08:00
ProtobufCore 服务器当前帧 2024-09-13 13:41:04 +08:00
References fixed 2024-08-07 11:23:39 +08:00
.gitignore 添加忽略,添加PatternViewer的性能開關,当ROMDB转换了一个Mapper时,写日志 2024-08-06 14:24:55 +08:00
.gitmodules 移除AlienUI Core 子模块 弃坑了 2024-08-15 16:09:35 +08:00
AxibugEmuOnline.sln 新增WebApi 2024-07-15 16:12:09 +08:00
LICENSE Initial commit 2024-06-28 13:16:39 +08:00
README_WEBAPI.md WebApi 检查版本和获取服务器IP 2024-09-12 14:35:44 +08:00
README.md References 2024-08-07 12:07:20 +08:00

AxibugEmuOnline

用于游戏模拟器同步的联机纯C#实现

AxibugEmuOnline.Server 是服务端 .Net8

AxibugEmuOnline.Web 是Asp.Net Core(.Net 8)的WebApi

AxibugEmuOnline.Client 是客户端 Unity
	
	- NES EmuCore NES模拟器核心
	
			VirtualNes C++手动翻译到C#
			
			~~My Nes~~ (功能全,但是性能局限,不作为主要使用,但已经移植纯.Net Standard2.0归档)
			
			~~Emulator.NES~~ (较为初级,已经废弃)
	
	- 街机模拟器核心 Arcade EmuCore
			
			MAME.Net 来自于我另一个移植项目 http://git.axibug.com/sin365/MAME.Core 最终会迁移进来。源头上是MAME C/C++源码翻译C#

	- 其他核心,长期补充

意义

1.跨平台

PC、手机、PSV、PS3、WIIU、PS4等破解游戏机跨平台联机的模拟器虽然目前只有NES这是得益于Unity本身的跨平台能力。

目前其他跨平台联机,仅限于电脑和手机

2.良好体验为目标

以现代化联机方式作为基本方向

3.各种有意义的探索(作为额外功能)

应该是Unity引擎中对于模拟器内核的画面接入良好的范例

除了联机同步之外,模拟器本身的一些云游戏探索,如用模拟器帧缓存做云游戏

3.1 帧缓存云游戏概念

	验证了一下 把模拟器帧缓存 走公网同步,实现联机的另一种方式

	云游戏,但是不是视频流的方式,是同步模拟器帧缓存,+GZIP压缩。NES这种低分辨率+颜色查找表的方式。画面传输只需要9k/s
	
3.2 帧缓存云游戏TODO

	1.目前只同步了画面操作CMD同步还没做。

	2.以及多用户自行创建房间,和玩家选择要加入的房间列表还没做。

3.3 帧缓存云游戏简述客户端逻辑:

	Player1主机才跑模拟器实例然后Player1 会把渲染层的数据上报服务器。服务器广播。

	Player2即二号手柄玩家不运行模拟器实例画面渲染来自网络同步的数据。

	PS:场景中UNES Test的Inspector勾选Player1作为玩家1不勾选作为玩家2

	*之前试过直接上报渲染层但是这样会有6w左右大小的uint[]

	*初步优化之后采用只上报每一个像素对应颜色查找表的下标这样就是一个byte[]了

	*PorotoBuf 传输使用的是bytes但是Porotbuff只会对数组里每一个byte进行位压缩整个byte[]不压缩。于是C#先GZIP压缩之后在扔给protobuf。对面再解压。超级马里奥最复杂的画面情况是9k每秒的样子/。

代码贡献/协作者

AlienJack

引用

本项目使用我自构建的HaoYueNet高性能网络库作为基础而开发

HaoYueNet-Github

HaoYueNet-自建Git站点

nesdev.org NES - 2.0 XML Database

VirtuaNES

部分NES-Mapper扩展 https://github.com/yamanyandakure/VirtuaNES097

部分NES-Mapper扩展 VirtuaNESex

NES 模拟器内核

模拟器内核采用 Emulator.NES https://github.com/Xyene/Emulator.NES

这是一个单机的 NES模拟器C#实现,我在此基础上做修改

做帧缓,颜色查找下标缓存,做同步,加上网络库,并实现服务端。达到如上效果。

----

随后我们选择了更为全面的MyNes作为Nes模拟器核心以此做二次开发和魔改。并实现自己的服务端和客户端联机逻辑

----

然后我们又开始尝试把 VirtualNes 的内核翻译为C#,在尝试内核的路上越走越远……

关于 NES Mapper支持

众所周知 NES/FC 在整个生命周期中有各种厂商扩展的各色卡带Mapper

Mapper支持越多通俗讲就是支持更多卡带。

由于我们最终使用的是 VirtualNes CPP翻译CSharp

那么理论上已经算拥有最全的模拟器Mapper支持几乎没有不能运行的游戏官方游戏

而VirtualNes官方的Mapper的基础上也有很多民间二次补充使得一些特殊的游戏也可以运行比如 吞食天地2孔明传 中文版,福州外星科技等等,就得以支持)

我们的项目也必须支持上! 咱们也同步要进行一个补充

追加了特殊的失传Mapper 35,111,162,163,175,176,178,192,195,199,216 (from https://github.com/yamanyandakure/VirtuaNES097)

后续补充二次,修正 Mapper163 175 176 178 192 199 参照叶枫VirtuaNESex_src(20191105)

街机模拟器核心

原本是我独立移植到Unity的C# MAME.Core实现

最终会继承到本项目中

http://git.axibug.com/sin365/MAME.Core