NES gameinvitro“ MULTIDEFENDER”的制作

因此,3月底,在2020年修订版的气息上,还有很长的一个月的自我隔离期,这一切都像往常一样开始,因为我们决定为NES编写另一个演示。当然,“演示”有点大声说。根据我们自己的能力和到截止日期为止的剩余时间,本课程旨在创建一个简单的邀请参加Multimatograph(沃洛格达州的俄罗斯演示者),该邀请由带有信息的滚动条和基于Multimatograf徽标的简单均衡器效果组成。



工作原理-我们将从头到尾详细分析每个部分。

滚动条和徽标


最初,这部分是主要部分。与往常一样,所有“车身套件”都是在此过程中发明和引入的。渐变和徽标在背景层上制作。我们经历

渐变选项1  渐变选项2

几种外观选择:直到最终批准电流:

最终梯度

痛苦的选择非常简单地解释:控制台屏幕及其属性的组织不是很简单。 NES屏幕由32x30的图块组成,尺寸为8x8像素。并且例如在ZX Spectrum或Commodore 64上,一种双色属性作用于一种熟悉程度,则此处四色调色板的属性覆盖了多达2x2熟悉度的区域,或16x16像素的正方形。只有4个调色板可用,因此,要绘制渐变色和红色徽标,我们必须使用3个具有相同颜色的调色板。

雀巢背景

为了获得静态背景的效果,选择了棋盘格渐变,并为每个新的滚动坐标重置了最低位,以使背景仅在偶数位置移动,从而产生了带有似乎静止的背景的运动徽标的错觉。是的,效果通常就是这样:无法决定额头-欺骗。

在此过程中,一些细微差别变得很明显,例如CRT电视上的象棋抖动看起来与模拟器中的样子完全不同,后者在带有真实电视的真实机顶盒上进行了测试:

CRT电视上棋纹理的变形

确实,没有什么好处。但是,由于背景已经遭受了如此艰巨的折磨,并且该节目本来应该是在模拟器上进行的,所以我们给这些琐事打了分数,最后,这种云纹看起来并不那么可怕。

摘要:

  1. — . , .
  2. .
  3. “” , “” + - , .


带有滚动条的行与主屏幕之间用“分隔”分隔。此技术已在许多经典游戏中使用,例如Super Mario中的HUD。但是,与《超级马里奥》不同,“分割”屏幕的两个部分都有自己的自主滚动。在Dandy上实现单侧滚动非常简单,实际上,所有带有滚动屏幕的平台游戏都已制作完成:每个新字母(或风景/迷宫列)每隔+16像素在相邻屏幕中绘制一次,然后相机向右移动16像素,然后重复所有操作再次。

为了使滚动看起来不完全乏味,对它应用了两个效果:

1.“ gasgaskrin”在NES上的相似性。为什么不?为此,字体是用棋盘格纹理绘制的:偶数像素具有一个调色板索引,奇数像素具有第二个调色板索引,在表索引之间进行过渡:纹理的第一个偶数点,然后是奇数点。结果,我们从NES调色板中获得了介于现有颜色之间的中间颜色,并且颜色变化看起来更加平滑。如果您不知道它的效果,则不是很明显,但是仔细观察滚动条,您可以了解它的含义:

滚动字体

2.滚动线“跳动”至节拍的节拍。为此,跟踪播放器的缓冲区及其噪声通道,并将垂直缓冲区添加到水平滚动中。

摘要:

Dandy允许您将屏幕分成至少两个部分,每个部分都可以独立滚动。对于徽标和滚动条,这两部分对我们而言已经足够。为了清楚起见,我们建议您查看徽标

徽标相机动画

的“相机” 和滚动条的“相机”:

动画滚动相机

现在是时候进入车身套件了。

NESDEV徽标


总的来说,这已经是我们在此组合中的第二项工作,因此,对于这样的协会,标签“ Nesdev team”是通过Telegram频道的名称选择的,我们在其中讨论与控制台,其编程和新闻有关的所有内容。铭文的外观是在其演示作品Overdrive中以类似于Titan徽标的方式选择的,反过来模仿了Sega品牌徽标的风格,并且在渐变效果下,我们将一定数量的墨盒和放桌子的桌子放在一起。事实证明还不错:

桌子淡入淡出动画

但是,由于盒式磁带上的可用空间有限,经过一些修订,决定放弃其中的某些表,并将渐变表转移到neslib库的标准解决方案中(徽标下的文字除外):

neslib淡入淡出动画

Vologda蕾丝


Vologda花边动画

最初,我们计划使用良好的旧调色板以平滑的渐变显示这些字母组合,但是由于NES属性不仅影响一种熟悉度,而且影响到4种,因此我们不得不放弃此方法,因此决定在所需的背景图块之前将精灵用作初始动画。会被熟悉“打动”。

使用谷歌方法,选择了几个合适的参考,并决定停留在其中之一,这是我们的任务略有掺杂。

花边-参考  花边画

这张图片有387个独特的图块。问题在于NES图形页面包含256个图块。在这种情况下,可以使用相同的旧屏幕进行救援。如果在拆分之前我们激活了第一页图形,那么在拆分之后我们可以单击jar并打开第二个字符集。仅对于具有CHR-ROM的映射器而言,这是正确的,但是同样,同一篇文章中的所有详细信息,我们强烈建议谁还不熟悉。

还有两个带有图形的免费罐,因此将屏幕垂直分成两部分,并选择了最佳的拆分位置,在该位置中切换了图形库。因此,我们为上下两个部分分别设置了256个磁贴的字符集,每个字符集大约容纳192个磁贴。这已经足够了,并且还留有必要的余量来放置额外的图块,以使图案的相交部分具有动画效果。

银行1:

花边银行1

银行2:

花边银行2

不难发现,存储体的背景页面具有不同的图块集,并且子画面页面是相同的:切换的存储体的粒度为8 KB(每个背景4个,每个子画面4个)。子画面层的不同图块的数量小于256,因此,为方便输出,所有子画面都放在一页中,在两个8 KB的存储库中都重复了一次。

调色板具有我们可以更改的3种颜色(第四种是背景颜色,一般颜色,当前是黑色),这意味着我们可以结合使用精灵和背景图块,为一个熟悉程度实际上组织4个阶段的一种颜色动画。

精灵和背景动画阶段

为此,我们在子画面图块中绘制动画的前三个阶段,并使用调色板1、2、3的索引(为清晰起见,在图中分别以红色,蓝色和绿色突出显示每个阶段),背景图块作为第四个动画图块。
从理论上讲,它看起来像这样:

阶段1:调色板索引1 =白色,其余为背景色(黑色);
阶段2:调色板索引1和2 =白色,其余部分-背景色;
阶段3:调色板索引1、2、3 =白色。
阶段4:移除精灵,然后将最后一个阶段从背景字符“键入”到背景中。

我们进行下一次熟悉,等等。

传统上,为清楚起见,您可以分别查看子画面层上发生的情况:

花边-雪碧图层动画

当然,除了白色之外,您还可以使用其他任何颜色。这种特殊效果的主要限制是,精灵动画始终是单色的,而背景图块已经可以具有更多的颜色,就像我们所做的那样。因此,该结论是附加效果,因为所显示的字母组合的笔尖仅以白色动画显示,并且看起来像背光。

背景图像由3种颜色组成:两种灰度和一种白色(调色板0)。这一切在调色板2中都是重复的,只有一个例外:灰色之一变为黑色,并且最初,该调色板填充了屏幕。

在显示字母组合的过程中,我们“逐行”替换屏幕上的调色板,从而产生了将字母组合细化的附加层“推开”效果。在下面的图片中,调色板的该插槽用深灰色标记,红色是零精灵的位置,黄色是切换jar之前的等待时间(为什么准确-如下所述):

花边-拆分和切换位置

整个动画分为3个阶段(第4阶段与第1阶段合并)保持开场音乐的声音。

每个阶段持续4帧,并在每个帧中分别绘制:

0帧-上部的背景图块
1帧-上部的精灵图
2框架-下部和花的背景图块(它们的外观由表格根据全局框架计数器设置)
3框架-底部精灵

这样做是为了满足代码执行的速度,我必须说,它不是非常理想地写在多维数组上,因此强烈建议不要这样做。编译器同时生成的绑定看起来很可怕。

编写了一个原型实用程序(javascript + html),绘制了几层背景,并删除了部分图形以动画化相交的地方,并遮盖了几层遮罩,然后逐帧单击它,生成了图块,屏幕和带有动画数据数组的C代码的二进制文件。同样,为了完成图片,添加了此部分的所有计划效果和音乐,以便在原型制作阶段可以看到完整图片。该实用程序已添加到资源库,工作结果存储在localStorage中,刷新页面时,所有数据均被单击并重新计算,并且动画数组以json的形式显示在文本字段中。

动画解析工具

事实证明,选择动画的解析方法很困难,而且很多时候我们不得不重新绘制蒙版的各个部分,最后没有时间了,而且一些小故障永远存在。而且,所有内容最初都是根据NTSC系统的规范编写的,因此PAL区域存在问题,但我们可能仅在下一个工作中考虑它们。

结果:动画精灵和背景渲染组合很熟悉-这是一个很好的古老传统,用于游戏和某些演示产品(HEOHdemo)中,但是以不同的方式执行,您可以获得不同的效果,这完全取决于您的想象力。

马赛克“ MULTIMATOGRAF”


这里的一切都很简单-徽标分为“立方体” +初始坐标和偏移量数组。也许值得一提的是一个小的二手黑客。 NES子画面的限制是每条光栅线8个,但我们未能摆脱第九个“零子画面”,它将屏幕分为两部分,这产生了一个小问题:一个徽标子画面消失了,越过了“零”子画面的Y位置。我不想更改徽标的位置,而且花了很多时间在简介的主要部分中绘制徽标,并且通过反复试验,我们找到了一个适合零精灵的位置(在拆分之前的行的开头),并且在拆分本身之后,精灵被隐藏在屏幕之外,加上计划的延误,直到生产线结束为止,此后,拥有租船权的银行已经开始转换。结果,徽标精灵不会只显示几帧,也不会仅显示在屏幕的一行上,这不会伤及我们的眼睛并适合我们的目标。

内部还是游戏?


同时,mr287cc用我们的下一个想法激烈地用完了墨盒的可用空间:我们决定击败当前的“冠状病毒”主题,并研究Vologda脱皮病的组织方式,由于隔离,越来越多,我们决意“保护“多谱仪”免受冠状病毒。沿着几个样条路径,病毒应该沿着它飞翔,在屏幕的底部,有一个飞船,可以射击病毒并将其变成啤酒。但是由于用病毒制造的啤酒是马马虎虎,所以这个想法被稍微重提了,我们刚从Galaga游戏中得到了一艘宇宙飞船,摧毁了沿着不同轨迹飞行的病毒链。

游戏的起源

进一步-更加朴实的飞行员AI被修改为不太朴实的AI,然后为病毒链的出现创建了声音效果,爆炸的破坏和动画效果,计分器,并以接近的分数表的形式实现了问候和邀请:

邀请问候

在某些时候,我们并决定有必要给观众提供机会亲自控制飞船并消灭病毒。这是将Intra变成成熟的迷你游戏的第一步。

每个人都真的很喜欢这个主意,并且玩了很多之后,有人开玩笑地注意到没有足够的老板,我们无法停止。尽管那时一些演示场景的演示部分尚未完全准备就绪,但在被我们吸引的狂喜中,我们将所有精力完全投入了游戏部分。 mr287cc重新将飞船从线性移动到惯性,而TmK截取了第一个版本的老板:

老板-第一版

受恶魔城老板的启发,该选项得以最终确定,一个出色,健康,成熟的老板出现在我们的游戏体外。

老板最后的选择

然后,我们进行了深入研究,并根据90年代古老的花花公子游戏的规则完全执行了老板的行为,从无忧无虑的时间开始,当我们仍然无法编程并紧紧握住游戏手柄,不留显像管时,我们整夜都在玩花花公子。 。在发射病毒弹壳,弹丸飞行路线,命中时和命中点降低到一定水平以下时闪烁,甚至在获胜后爆炸之前,都可以加快动画阶段:所有这些都是我们从90年代经典游戏开发中获得的游戏体验。

同时,尽管我将某些数据从PRG推送到了CHR-ROM,但免费ROM的限制已经结束,并且我们同意无法进一步完善游戏这一事实。但是,几乎在截止日期之前,渲染显示视频时,发现了一个非最佳的开放周期代码,在编辑后又释放了3 KB的空间,然后将CHR-ROM中的数据打包并补充了PRG-ROM中的其他数据,从而有可能获得更多信息。大约千字节,但是没有时间进行修改了。

在截止日期之前,并不是所有的计划都实现了,但是我们不会放弃。

怀着在demopati举办比赛的想法,我们继续发展并取得了什么-请看最终版本。在游戏中,宇宙飞船和敌人的爆炸被重新绘制,在聚会版本中,有一些借来的精灵,添加了玩家的名字,增加了高分表,进行了一些小改动并进行了外观改进,从而创建了一个简单但非常适合具有朴实游戏性的锦标赛游戏:在一段时间内,您需要尽可能多地拍摄冠状病毒垃圾和得分最高分。

游戏信息

快速指南:

  1. 我们正在等待使用Vologda花边完成介绍性效果,然后将开始介绍和游戏演示模式。
  2. “选择”按钮切换高分表的显示,有关游戏的信息。
  3. 点击“开始”按钮。
  4. : — 6 .

时间在沙漏图标的左上角显示。在游戏结束前大约一分钟,图标以一定强度闪烁,表明时间已到。

敌人一波又一波地攻击:3波病毒(每波都可能出现“超级病毒”,不建议您错过它们,因为会为它们加分。)在3浪结束时,生成boss,然后再次按照通常的模式进行:3浪,boss,直到分配的时间用完。

老板有10点生命值,每位移除者可获得1分。击败老板时会获得加分。每次击中该船,玩家便会失去1点并被暂时固定,如果在与上司的战斗中发生碰撞,则在这种情况下,上司将获得1点的生命值。

游戏结束时输入昵称

摘要:

  1. 我们在Revision上展出;
  2. 我们邀请您参加Multimatograph;
  3. 我们为在演示场景中没有很好表现的平台制作了Gamevitro。

特别感谢bfox和Quiet的提示和测试游戏玩法。

来自TmK的PS:

通常,这并不容易,基本上我们是用C编写的,而在汇编器中只有一些时间相关的东西(例如,分析器输出到徽标)。在此之前,我在之前的工作(NESPECCY)中曾经有过开发NES的经验,但是从那以后我就忘记了很多(而且我在汇编器中编写的代码现在看起来并不熟悉,以及如何正确地优化C代码-很多时候,优化是通过简单的方式实现的用于编写代码的各种选项的暴力破解)。

我们敦促您不要在最后一刻推迟关于demopati的写作工作,从今天开始,甚至从现在开始,尤其是因为已经知道所有事件的大概日期。

关于音乐背景的几句话来自n1k-o / Stardust


由于我们工作的目的是邀请对伏洛格达政党有同情心的人参加,所以首先想到的是将著名的曲目作为基础,他们不断地在“沃洛格达语中指定”,“何处”。该曲目的封面混音想法实在是站不住脚的:不太适合于体外风格,因此决定将其介绍从原始曲目中删除,然后在曲目中我简短地介绍了合唱动机。在这一部分,翻唱歌曲结束,原始曲目更进一步。 (“原始”带有一些警告:选择了与演示视频序列相匹配的参考:它具有鲜明的低音线,时髦的拍子,动听的旋律,通常来说,所有声音都可以收听,并且不会关闭至少2-3个周期。)

在第一种方法中,了解了有关Vologda的歌曲的主要动机,并来回扭动,我绘制了节拍和低音线,并尝试按照“介绍”曲目中的建议进行操作。

涡旋追踪器

尽管实际上该编辑器主要是为ZX Spectrum编写音乐而设计的,但在Vortex Tracker中,对所有这些方法进行概述对我来说都比较容易:它的工作速度更快,更熟悉,而速度和质量是最主要的。将笔记从一个编辑器转移到另一个编辑器(FamiTracker)并不是最大的问题:由于Ivan Pirog and Co.的努力,Vortex跟踪器可以将数据复制到Famitracker的剪贴板中。

因此,我以草图的形式制作了NES轨迹中的几乎所有主要草图,如果需要,也可以为ZX Spectrum添加该轨迹。

工作的第二阶段是将轨道从Vortex跟踪器转移到FamiTracker,任务很单调-复制和粘贴。幸运的是,我已经为某些人编写了将近一年的书,并且FamiTracker的界面几乎已经变成了本机(但不是用于快速草图,这里我仍在使用界面)。复制完所有部分后,我开始为每个部分开处方,选择乐器和所有应该饱和的部分,并给轨道完整的外观。

FamiTracker

最初,我被保证可以使用整个编辑器的功能以及所有命令和功能,而且,顺便说一句,在我不断受到限制之前,我从未使用过编辑器-这很棘手编码员从普通音乐家那里获得了权力和回旋,从而使他们(编码员)拥有更多的权力和回旋余地。因此,您必须在极为有限的条件下工作-这样您才能了解,也无法在为此专门提供的跟踪器列中更改乐器的音量,这就是Famitone播放器格式的局限性。总的来说,这里要记住的是,没有什么是不可能的,除了有可能,而且这是相当多的,因此更容易记住您不会弄错。以此类推,这类似于最初的编辑器中的限制,刚刚在90年代出现了-可用的数量也很多。

一般来说,就好像您可以完成故事一样,因为没有别的了,我移动了这条赛道,对其进行了充分的充实和发展,然后这些家伙们定期地想出了如何使我继续工作的想法-尽管它摇摆了很长时间,但我还是尽一切令人羡慕的。还需要在模式的末尾用节拍来补充最终曲目,以控制滚动的“跳跃”,或淡化低音和打击乐器的部分以使听觉放松。

FamiTracker部分曲目

最后,有必要制作效果,这实质上是使用乐器(例如 我们需要发出声音-这意味着我们使用跟踪器的相同工具来描绘这张照片,并将其保存为单独的曲目。对于跟踪器,可能有人发现一个.NSF模块中可以包含多个旋律,相同的规则适用于效果,但是它们又可以具有独立的乐器基础。

声音效果

总的来说,最后,我想说的是传统游戏,编写演示场景,制作游戏,而不是厌倦了游戏中反映的所有这些冠状病毒事件(即,不要生病)。

您可以在此处下载包含聚会和最终版本的软件包

带有Credits 开发过程的存储库




PS:我们邀请Demoscene的粉丝参加demopati Multimatograf估计日期是7月初,这取决于您在我们的游戏中对付这种病毒的成功程度。

All Articles