Stage1st

 找回密码
 立即注册
搜索
查看: 4290|回复: 23
打印 上一主题 下一主题

[PC] 请教:老游戏程序设计方法

[复制链接]
     
跳转到指定楼层
楼主
发表于 2024-3-2 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
象APPLE II 上的“警察捉小偷(淘金者)”、“空手道”
DOS上的“波斯王子”、“战斧”、“西洋封神榜”、“星球大战”、“小蜜蜂”
雅达利上的“运河大战”


那时还没有DirectX 。是如何做到的?
APPLE II 上的源码,全部是6502汇编?还是“高级语言+汇编”
同理,DOS上是用“C语言+ASM”、“Pascal+ASM”?


这类源代码,是否完全依赖设计者的个人风格?关键功能是否晦涩难懂(尤其是汇编部分)?
这几位大神,后来的岁月,是否面向公众讲解过自己的思路和设计代码?
有没有这方面的书籍、教程、源代码拆解分析?(中文版)


回复

使用道具 举报

     
2#
发表于 2024-3-2 22:30 | 只看该作者
DirectX 主要是简化了 3D 的开发吧,如果是 2D 游戏的话手搓其实没有太大的问题。而且当时有些平台也是有硬件加速的,只不过可能 API 和现代主机一样不是标准化的。
并且就算是 3D,也可以手搓。D3D 的作用其实是不同厂商不同时代不同型号的加速硬件的标准接口。就算是在现代平台上,开发者也可以选择不用硬件加速或者只是部分使用硬件加速。这不是一个非黑即白的事情,比如我可以完全用 CPU 软光栅渲染,而我上次看到过一个引擎,不用 GPU 的 rasterizer,而是自己用 GPGPU 组织渲染(有意思的是在 CUDA 等专用的 API 出现之前,GPGPU 就是通过图形 pipeline 间接实现的),开发者声称达到了比硬 rasterizer 更好的性能。

至于具体的语言我觉得不太重要,现在的刻板印象就是那个年代的开发者都是手搓汇编的大神。当然无论大方向是什么,由于当时性能限制,必然需要用很多的 trick。我在 YouTube 上就瞄到过一些相关的视频,虽然有可能大多数只是走马观花很浅的介绍。不过 anyway,找这种 niche 的东西,只局限在中文的话会很难搞。尤其是原开发者本来就不是重度中文使用者。
回复

使用道具 举报

     
3#
发表于 2024-3-2 23:04 | 只看该作者
苹果机上的游戏开发我记得挺魔幻,图形技术出自一个黑客写的编程指南,非官方的
好像是在doom启示录里有写

分析游戏代码的书我见过两本:
Game Engine Black Book Doom (v1.1) (Fabien Sanglard) (Z-Library)
Game Engine Black Book Wolfenstein 3D v2.1 (Sanglard, Fabien) (Z-Library)

就算是卡神的代码,在那个年代还是显得青涩的
熟悉了doom的结构后可以读quake2,doom3,还有被魔改过的绝地学院。绝地学院的代码不全,删掉了和主机相关的
回复

使用道具 举报

     
4#
发表于 2024-3-2 23:05 | 只看该作者
wewai 发表于 2024-3-2 22:30
DirectX 主要是简化了 3D 的开发吧,如果是 2D 游戏的话手搓其实没有太大的问题。而且当时有些平台也是有硬 ...

我觉得不可能,难道那位作者还能比驱动更懂硬件吗
回复

使用道具 举报

     
5#
发表于 2024-3-2 23:34 | 只看该作者
本帖最后由 格林达姆 于 2024-3-2 23:35 编辑

**上这类内容还挺多的
理论课,第2集就讲到了apple和atari
https://www.youtube.com/watch?v=Tfh0ytz8S0k
实操
https://www.youtube.com/watch?v=7r83N3c2kPw
国内那个时候接触这些的少,所以文献当然有限。放国外从那个时代过来现在还有精力分享的人还挺多的
回复

使用道具 举报

     
6#
发表于 2024-3-2 23:43 | 只看该作者
精钢魔像 发表于 2024-3-2 23:05
我觉得不可能,难道那位作者还能比驱动更懂硬件吗

两个冷知识:

* 开发驱动的人绝大多数不是架构师自己的孩子,也是外面招进来的,同时也有可能跳出去。
* 硬件厂商不是铁板一块,硬件厂商内部的工程师不是什么都知道什么都懂,技术细节还是需要通过邮件、开会、培训等方式传播。

另外性能优化这种东西,在所有 case 下都提升一般很难,但是我挑一个 case 出来专门优化出一定的提升,理论上是可行的。
回复

使用道具 举报

     
7#
发表于 2024-3-2 23:44 | 只看该作者
精钢魔像 发表于 2024-3-2 23:05
我觉得不可能,难道那位作者还能比驱动更懂硬件吗

硬件是为了某种场景特化的,你换个使用场景效率可能会暴跌,这时候用软件反而绕过了瓶颈,这很正常。你就拿gpu光栅来说,nanite就是靠软光栅实现了一部分性能提升

—— 来自 S1Fun
回复

使用道具 举报

     
8#
发表于 2024-3-2 23:45 | 只看该作者
GuardHei 发表于 2024-3-2 23:44
硬件是为了某种场景特化的,你换个使用场景效率可能会暴跌,这时候用软件反而绕过了瓶颈,这很正常。你就 ...

在windows上怎么绕,都是要过驱动的
回复

使用道具 举报

     
9#
发表于 2024-3-2 23:51 | 只看该作者
wewai 发表于 2024-3-2 23:43
两个冷知识:

* 开发驱动的人绝大多数不是架构师自己的孩子,也是外面招进来的,同时也有可能跳出去。

不是这样的,微软dx规定了这个版本能做什么什么功能,a卡n卡内部怎么nb微软管不着,但他们提供的驱动一定要实现dx规定的功能,这和架构没关系

一个程序员写代码控制显卡,就几个选择:用dx调驱动,或者用vulkan调驱动,做不到超出图形接口功能之外的事
回复

使用道具 举报

     
10#
发表于 2024-3-2 23:56 | 只看该作者
精钢魔像 发表于 2024-3-2 23:51
不是这样的,微软dx规定了这个版本能做什么什么功能,a卡n卡内部怎么nb微软管不着,但他们提供的驱动一定 ...

“绕过”具体意思是传统上使用 rasterisation pipeline 实现的功能,不使用 rasterisation pipeline 实现,而是利用 API 提供的可编程性,使用 compute pipeline 实现。根本就不会调用 rasterisation 相关硬件,同时又在 API 范围之内。
回复

使用道具 举报

     
11#
发表于 2024-3-3 00:20 | 只看该作者
老游戏很多是直接用DRAW语句画图形的。
再底层一点的,会直接往显存里写数据,和DIRECTDRAW的用法其实是一样的。

DIRECTDRAW本来就是因为WINDOWS下没办法像以前那样直接访问显存之类底层资源了,而模拟显存操作的一个封装层。
换句话说,WINDOWS之前本来就能直接访问,根本不需要这层抽象层。
回复

使用道具 举报

     
12#
发表于 2024-3-3 00:21 | 只看该作者
本帖最后由 厨具战士 于 2024-3-3 00:29 编辑

曾经有一句话:“hacking hethack is the best way to learn C”。显然,1987年的nethack,roguelike四元祖,最伟大的RPG之一,涌现式玩法的教材,是用C写的,而且曾是C语言学习的玩具之一。
同时代的另一元祖angband也被誉为最优美的开源程序之一,只是修改娱乐性上可能不如nethack。nethack真是一个牵一发动全身的游戏,多一个道具就多N种玩法。
缺点是这两个游戏都没什么图形方面的表现,可能不是大多数人想找的东西。
而且现在也完全不建议用这种方式来制作游戏了。非要重复这种编程体验的话python配合一些东西会更简单。
回复

使用道具 举报

     
13#
发表于 2024-3-3 00:25 | 只看该作者
Tring 发表于 2024-3-3 00:20
老游戏很多是直接用DRAW语句画图形的。
再底层一点的,会直接往显存里写数据,和DIRECTDRAW的用法其实是一 ...

dx是为了保证大多数硬件都能在windows上运行

doom启示录里写了一件事:微软和某家品牌电脑合作,集成迪斯尼的游戏,但因为那家品牌电脑公司变动了硬件,100万台windows搞出了100万次崩溃。后来在推广dx时大门还cos了毁灭战士一把
回复

使用道具 举报

     
14#
发表于 2024-3-3 00:44 来自手机 | 只看该作者
dos游戏的编程 台湾那边的中文资料比较多
回复

使用道具 举报

     
15#
 楼主| 发表于 2024-3-27 20:37 | 只看该作者
APPLE II 游戏 Loader Runner


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

     
16#
发表于 2024-3-27 21:17 | 只看该作者
本帖最后由 dumplingpro 于 2024-3-27 21:22 编辑

波斯王子这些有公开源代码。

在2D加速卡和3D显卡出现之前,都是直接用强大的CPU性能大力出奇迹,直接找一块内存区域"画“的,像DOOM这种都是可以纯CPU跑的。
回复

使用道具 举报

     
17#
发表于 2024-3-27 21:33 | 只看该作者
proof1 发表于 2024-3-27 20:37
APPLE II 游戏 Loader Runner

淘金者是lode runner
这个游戏跟我同岁,所以记得很清楚,不过作者已经于2014年去世了
它也是第一批登上FC的移植游戏,2018年还在X360上搞了个3D的新版
回复

使用道具 举报

     
18#
发表于 2024-3-27 21:57 | 只看该作者
本帖最后由 chachi 于 2024-3-27 22:03 编辑

老游戏关键词:
调色板
调用调色板,设置颜色,画点、连成线,连成图

恩,还有预定义的sprites精灵和层
回复

使用道具 举报

     
19#
发表于 2024-3-27 22:56 | 只看该作者
约翰卡马克,95年就把引擎代码开源了
回复

使用道具 举报

     
20#
发表于 2024-3-28 03:27 | 只看该作者
**上一大堆. 还有自制8bit游戏的.人物像素比马里奥还小. 地图怎么画的,怎么扣空间,都有.
回复

使用道具 举报

     
21#
发表于 2024-3-28 16:25 | 只看该作者
dumplingpro 发表于 2024-3-27 21:17
波斯王子这些有公开源代码。

在2D加速卡和3D显卡出现之前,都是直接用强大的CPU性能大力出奇迹,直接找一 ...

我看一个youtube视频讲dos游戏,说直到97年还有不少游戏开发商不愿意给win95开发游戏,因为dos可以直接调用底层硬件特效~~~但是我不懂这些,请问有道理吗?当年dx早期版本确实不怎么受待见~~~
回复

使用道具 举报

     
22#
 楼主| 发表于 2024-3-28 19:53 | 只看该作者
oyss 发表于 2024-3-28 03:27
**上一大堆. 还有自制8bit游戏的.人物像素比马里奥还小. 地图怎么画的,怎么扣空间,都有. ...

**是什么文字? 可以换一种方式表达吗?比如,换字、拼音、……
回复

使用道具 举报

     
23#
发表于 2024-3-28 20:32 | 只看该作者
本帖最后由 精钢魔像 于 2024-3-28 20:34 编辑
junqqq999 发表于 2024-3-28 16:25
我看一个youtube视频讲dos游戏,说直到97年还有不少游戏开发商不愿意给win95开发游戏,因为dos可以直接调 ...

windows为了兼容各种各样的显卡,要求显卡必须实现微软提出的功能,所以调用硬件要经过一个虚拟层。
还有就是微软赢得了c++四国大战,windows的系统语言是c++,dx自然成了c++风格。在那个时代会用c++的人不多,要么是按c用,要么是把一切东西塞c++类里,和gl相比,dx接口臃肿而且难用,这里又扯到微软的com技术了。
显卡厂商的激烈竞争又体现在了opengl扩展功能上,当时dx的功能是不如opengl的。

后来技术发展,显卡可以编程了,dx也慢慢变得容易用了,到了dx9的时候一统江湖。
回复

使用道具 举报

     
24#
发表于 2024-3-28 20:49 | 只看该作者
所以游戏引擎相当于就是游戏开发一套SDK,图形硬件的底层接口一般是有dx12 vulkan opengl的标准规定。不同显卡厂商有自己的内部实现,单独某个显卡独有的功能可以通过该厂商的扩展来实现。至于没有gpu硬件的时代,那就纯粹是软光栅,cpu硬算的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|stage1st 沪ICP备13020230号-1 沪公网安备 31010702007642号

GMT+8, 2024-4-29 17:51 , Processed in 0.077280 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表