ASCII游戏-真实性和便利性的折衷

大家好!在开发风格化为文本模式的游戏时,我遇到了预期的矛盾。一方面,游戏应该充满文字模式的精神,因为为此我喜欢它,并且我希望复古游戏的迷们会喜欢它。另一方面,我希望游戏玩法尽可能愉快和现代。在本文中,我将描述偏离真实文本模式的五个要点。我是否设法在游戏中保持电子管字母数字的心情?我要求发表意见!



1.字符集


绝对游戏中的所有图形都是使用在键盘上键入的字符制作的。更准确地说,使用了ASCII表中从第32个字符到第126个字符的字符。



但是,游戏中的文本以几种语言本地化。现在,我同时支持俄语和英语,但是我想添加更多内容,包括中文。ASCII表中的字符,甚至扩展表中的字符,显然也不足以满足这些目的。



游戏中的对话框中可能包含不是真实范围内的字符。但是,这些字符不参与设计。图形仅是ASCII。

2.子字符精度


与文本模式不同,ASCIIDENT使用像素精度来移动文本层和移动精灵。



在文本模式下,精灵移动一个位置看起来像是一个明显的跳跃。对于像ASCIIDENT这样的动态游戏-从现代游戏体验的角度来看,这是不可接受的。因此,对于稍后将要讨论的各个精灵和文本层,我进行了平滑的移动。

为了保持真实性,我遵守以下规则。在一个文本层内,所有静态对象在字符网格上均清晰对齐。而且,每个精灵都由字符组成,这些字符也对齐在字符网格上。

相对于彼此,层和移动物体可以位于亚符号距离处。这样可确保动作平稳,并因此带来舒适的游戏体验。这是一个妥协。

3.视差


该游戏具有多个以不同速度移动的文本层,从而实现了视差效果。上层的符号与下层的符号重叠。对于子字符精度,重叠条件是文本单元格的宽度和/或高度的50%以上的覆盖。使用简单的z缓冲区,这种重叠很容易实现。



视差与层的平滑移动是一种非常有表现力的图形技术。是的,它可能会严重违反文本模式的真实性。但是,我决定使用视差。结果非常漂亮。

4.动画


严格按照文本模式制作的“诚实”游戏中的各个精灵动画。每个字符的位置在文本网格上对齐。通过替换单元格中的字符来获得动画。



我发现保持Sprite动画的完整性非常重要。这可能是使游戏具有复古吸引力的主要原因。此外,使用这种动画类型,创建和编辑动画ASCII精灵在技术上变得非常简单。我无法抗拒,并在游戏中制作了内置的ASCII编辑器。任何时候都可以将任何图形元素加载到其中并进行更改。例如,您可以通过添加动画帧来编辑箱子,将所有箱子保存在游戏后的所有位置后,它将变成新的箱子。任何玩家都可以做到这一点,从而创建自己的游戏模式。


但是,有时您需要平滑的动画!例如,在游戏中,存在生长生物光纤的地方。无人机在病床上空飞来,用有毒液体冲洗光纤。液体应平稳滴落,否则难看。为了实现这种效果,我制作了精灵生成器并将其绑定到游戏世界中的任何其他精灵。从技术上讲,每个液滴都是一个可以以亚像素精度移动的单独的精灵。再次合理折衷。

5.浅色,颜色和字体


向我展示游戏的许多人都说我的游戏中的颜色太多。在文本模式下,没有如此丰富的阴影。事实是,我实现了可计算任意数量光源的全屏光照贴图。同时,每个字符的颜色为24位(16,777,216种不同的颜色)。有时图片看起来很彩色。



为了模拟复古色彩模式,我提供了七个附加选项:三个单色模式,两个16色模式(DOS / Mac),2位和Game Boy模式。 LED字体模式也可用。在这种模式下,每个字符的每个像素都与相邻像素分开。以下视频显示了所有模式-它们如何影响图片。


用于单色模式的颜色转换算法可以做到这一点。首先,我计算色彩亮度(R,G,B):

V = 0.3 * R + 0.59 * G + 0.11 * B

单色复古显示器针对不同的符号亮度具有不同的色调。因此,阴影也必须改变。我使用这样的线性插值:

RR = sqrt(V)*(monoR1 *(1-V)+ monoR2 * V)

GG = sqrt(V)*(monoG1 *(1-V)+ monoG2 * V)

BB = sqrt(V )*(monoB1 *(1-V)+ monoB2 * V)

最终颜色(RR,GG,BB)

对于16色模式,我使用了不同的算法。对于每种颜色(R,G,B),我正在寻找调色板中最接近的颜色。就这样。

2位和Game Boy模式在调色板中只有四种颜色。简单搜索最接近的颜色会得到非常暗的图像。因此,在调色板中寻找颜色之前,我先进行归一化:

d = 1 / max(R,G,B)

normR = d * R,normG = d * G,normB = d * B

公式是示意性的。除以零的检查没有提及。我希望每个决定玩ASCIIDENT的人都能为自己选择一种配色方案,以最大程度地温暖他或她的复古灵魂。

6.具有诚实文本模式的控制台


在创建游戏的过程中,出现了将具有真实文本模式的计算机终端引入游戏世界的想法。您可以接近他们,建立联系并进行工作/娱乐。

如果将游戏本身设置为80x25文本模式,并具有平滑滚动和文本层视差的功能,则内置终端屏幕的分辨率为72x20字符,不可能超出此网格。

嵌入式终端(包括引导加载程序)的所有应用程序均以DUHASM编程语言编写。该语言类似于汇编程序,但是具有动态变量和数组。例如,这里是Pi-astre Hanter游戏代码的一部分:



一个有趣的功能-循环是作为条件构造的一部分实现的,条件构造中放置LOOP而不是END。

在启动时,游戏会从* .duhasm文件加载应用程序,并将其编译为字节码。当玩家激活控制台时,将启动一个诚实的解释器。

目前,我已经在DUHASM上编写了两个游戏,这些游戏在当前版本中已经可用。有计划编写一个代码编辑器(当然也在DUHASM上),以便每个玩家都可以尝试创建所有其他玩家都可以看到的应用程序/游戏。


我希望我没有白费力气和时间来实现此功能,并且会有人喜欢它。DUHASM语言当然需要进行一些改进。我真的不喜欢如何用参数调用函数。根据游戏的历史,DUHASM语言由一个半敏感的电子人产生,他逃离了太空海盗实验室。令人惊讶的是,这种编程语言已扎根于宇宙居住区域的郊区。

结论


好吧,这里有很多折衷方案-一组字符,子字符精度,动画,颜色。但是,为了保持对文本模式的真实感,在过去的两年多的时间里,我已经做了很多工作。为了获得更多反馈并了解我的前进方向是否正确,我决定从Steam的抢先体验开始游戏在文本模式下,有一些神奇的吸引力。当可以使用键盘上的字符键入任何图片时,有时很难抗拒并且无法使用内置的ASCII编辑器启动游戏,甚至无法绘制新的迷你游戏的原型,然后将其以DUHASM语言实现。



谢谢大家!直到!

All Articles