用于游戏模拟器同步的联机.Net实现
Go to file
2025-01-07 20:29:31 +08:00
AxibugEmuOnline.Client 实现收藏和取消收藏接口 2025-01-07 20:29:31 +08:00
AxibugEmuOnline.Client.PSVita PSVita 完整程序运行基线 归档 2024-12-27 01:24:06 +08:00
AxibugEmuOnline.Server 房间携带Rom平台信息 2025-01-07 13:56:16 +08:00
AxibugEmuOnline.Web 扩展为多平台rom选择(api,客户端逻辑,服务端统计) 2025-01-07 10:51:12 +08:00
Core/VirtualNes.Core 核心.net standard2.0 2024-12-25 23:13:07 +08:00
etc 数据库结构 2024-11-28 19:56:31 +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 房间携带Rom平台信息 2025-01-07 13:56:16 +08:00
References fixed 2024-08-07 11:23:39 +08:00
.gitignore 本地手柄和游戏内手柄插槽抽象机制实现 2024-12-19 20:36:04 +08:00
.gitmodules 移除AlienUI Core 子模块 弃坑了 2024-08-15 16:09:35 +08:00
AxibugEmuOnline.sln 核心.net standard2.0 2024-12-25 23:13:07 +08:00
LICENSE Initial commit 2024-06-28 13:16:39 +08:00
README_WEBAPI.md 扩展为多平台rom选择(api,客户端逻辑,服务端统计) 2025-01-07 10:51:12 +08:00
README.md 房间携带Rom平台信息 2025-01-07 13:56:16 +08:00

AxibugEmuOnline

这是一个跨平台的包含游戏机同服的多人联机的纯C#实现的基于Unity客户端.Net9实现服务端模拟器开源项目。

本项目是完整的项目实现包含客户端服务端网站API。

并不是基于RetroArchLibretro等项目的套壳项目也并不是XX前端。请不要混淆。具体您可以看代码。

A cross platform, multiplayer online, Net 9 Server , Unity Client , game emulator used C#. on PSV/PS3,4/XBOX/3DS/Swith/PC/Mobile/or more...)

It's not a shell project based on projects such as RetroArch and Libretro。Please do not confuse. You can see the code for details.

意义

1.跨平台

PC、Android、iOS、PSVita、PS3、PS4、WIIU、XBOX360、XBOXONE等破解游戏机以及Android汽车车机跨平台联机的模拟器这是得益于Unity本身的跨平台能力。

目前其他跨平台多核心模拟器关键是跨平台统一联机的,几乎很少(好像我自己没看到)

什么叫多端互通啊?(端茶)

2.极简游戏体验 和 自动化联机

玩家任何事情都不用关心

玩家不用关心任何诸如IP或者任何联机配置直接玩。服务器是直接提供的玩家无感知。

做到只要你有设备,不管你是什么设备,有网络,就可以玩。

使用:

玩家:启动程序 -> 选游戏 -> 玩! (登录后台按设备自动登录的,游戏是自动下载的,进入游戏后,房间是自动创建的,玩家无感)

加入者玩家:启动程序 -> 选房间 -> 玩!(游戏是根据房间自动下载的,手柄是自动分配的,玩家无感)

3.柔性网络架构

最终效果,不会出现延迟高时的卡顿和暂停等待,也不会出现房间创建者和加入者之间 因网络状况差异造成体验差异,保证公平。

柔性指:根据网络延迟和木桶效应动态调整帧同步提前量。作为被动推帧。

核心原理是用刚好无限趋近于物理延迟本身的缓冲作,来抵消中间等待。

本来玩家的地理位置带来的物理延迟是不可抗因素,但我们把这部分拿利用起来对冲,任何耗时操作,队列,堆栈处理都在这部分完成。没有多余。

最终达到了除了物理延迟之外,没有任何浪费,并即便是网络状况极差时,仅表现为操作延迟,而不是其他一些模拟器的顿帧卡顿。且同步一致性得以保证。

一个跨平台的、自动化联机的、纯C#实现的、开源的模拟器项目

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

AxibugEmuOnline.Server 是服务端 .Net9

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

AxibugEmuOnline.Client 是客户端 Unity
	
	- NES EmuCore NES模拟器核心
	
			VirtualNes C++手动翻译到C#并收纳民间各种扩展Mapper实现接近于最全的游戏支持。实测高倍速加速游戏的同时几百fps且进行网络同步性能一致完全同步
			
			~~My Nes~~ (功能全,但是性能局限,不作为主要使用,但已经移植纯.Net Standard2.0归档)
			
			~~Emulator.NES~~ (较为初级,已经废弃)
	
	- 街机模拟器核心 Arcade EmuCore
			
			MAME.Net 来自于我另一个移植项目 http://git.axibug.com/sin365/MAME.Core 最终会迁移进来。源头上是MAME C/C++源码翻译C#
			
	- GameBoy
	- GameBoyColor
	- ColecoVision
	- GameGear
	- MasterSystem
	- SC3000
	- SG1000
			
			Essgee.Unity 来自于我另一个移植项目 https://github.com/Sin365/Essgee.Unity 最终会迁移进来。

	- 其他核心,长期补充

代码贡献/协作者

AlienJack

NES 模拟器内核

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

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

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

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

最后,我们又开始尝试把 VirtualNes 的C++源码徒手翻译为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)

街机模拟器核心 CPS1 / NEOGEO / PGM / Taito(b) / Tehkan / or other MAME platform

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

最终会继承到本项目中

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

8bit 其他模拟器核心 GameBoy / GameBoyColor / ColecoVision / GameGear / MasterSystem / SC3000 / SG1000

原本是我独立移植到Unity的C# Essgee实现包含

最终会继承到本项目中

https://github.com/Sin365/Essgee.Unity

各种有意义的探索(作为额外功能,和核心功能:联机 无关)

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

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

引用 和 致谢 Acknowledgements & Attribution

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

HaoYueNet-Github

HaoYueNet-自建Git站点

MAME.Core

Essgee.Unity

ShaderToy

VirtuaNES

nesdev.org NES - 2.0 XML Database

Essgee

MAME-NET