proof1 发表于 2024-3-2 22:06

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

象APPLE II 上的“警察捉小偷(淘金者)”、“空手道”
DOS上的“波斯王子”、“战斧”、“西洋封神榜”、“星球大战”、“小蜜蜂”
雅达利上的“运河大战”


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


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


wewai 发表于 2024-3-2 22:30

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

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

精钢魔像 发表于 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,还有被魔改过的绝地学院。绝地学院的代码不全,删掉了和主机相关的

精钢魔像 发表于 2024-3-2 23:05

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

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

格林达姆 发表于 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
国内那个时候接触这些的少,所以文献当然有限。放国外从那个时代过来现在还有精力分享的人还挺多的

wewai 发表于 2024-3-2 23:43

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

两个冷知识:

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

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

GuardHei 发表于 2024-3-2 23:44

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

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

—— 来自 S1Fun

精钢魔像 发表于 2024-3-2 23:45

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

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

精钢魔像 发表于 2024-3-2 23:51

wewai 发表于 2024-3-2 23:43
两个冷知识:

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


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

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

wewai 发表于 2024-3-2 23:56

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

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

Tring 发表于 2024-3-3 00:20

老游戏很多是直接用DRAW语句画图形的。
再底层一点的,会直接往显存里写数据,和DIRECTDRAW的用法其实是一样的。

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

厨具战士 发表于 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配合一些东西会更简单。

精钢魔像 发表于 2024-3-3 00:25

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

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

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

notqiao 发表于 2024-3-3 00:44

dos游戏的编程 台湾那边的中文资料比较多

proof1 发表于 2024-3-27 20:37

APPLE II 游戏 Loader Runner


dumplingpro 发表于 2024-3-27 21:17

本帖最后由 dumplingpro 于 2024-3-27 21:22 编辑

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

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

流缨 发表于 2024-3-27 21:33

proof1 发表于 2024-3-27 20:37
APPLE II 游戏 Loader Runner

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

chachi 发表于 2024-3-27 21:57

本帖最后由 chachi 于 2024-3-27 22:03 编辑

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

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

消亡值语义 发表于 2024-3-27 22:56

约翰卡马克,95年就把引擎代码开源了

oyss 发表于 2024-3-28 03:27

**上一大堆. 还有自制8bit游戏的.人物像素比马里奥还小. 地图怎么画的,怎么扣空间,都有.

junqqq999 发表于 2024-3-28 16:25

dumplingpro 发表于 2024-3-27 21:17
波斯王子这些有公开源代码。

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

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

proof1 发表于 2024-3-28 19:53

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

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

精钢魔像 发表于 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的时候一统江湖。

bananasjim 发表于 2024-3-28 20:49

所以游戏引擎相当于就是游戏开发一套SDK,图形硬件的底层接口一般是有dx12 vulkan opengl的标准规定。不同显卡厂商有自己的内部实现,单独某个显卡独有的功能可以通过该厂商的扩展来实现。至于没有gpu硬件的时代,那就纯粹是软光栅,cpu硬算的。
页: [1]
查看完整版本: 请教:老游戏程序设计方法