<html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <meta name="theme-color" content="#000000"> <title>Chrisoft::Ballance | Back and Forth - A Lucid Dream | 彷徨梦</title> <link rel="icon" href="/favicon.png"> <link rel="stylesheet" type="text/css" href="/common.css"> <link rel="stylesheet" type="text/css" href="/theme0a.css" id="theme0a"> <link rel="stylesheet" type="text/css" href="/theme0b.css" id="theme0b"> <link rel="stylesheet" type="text/css" href="/theme1a.css" id="theme1a"> <link rel="stylesheet" type="text/css" href="/theme1b.css" id="theme1b"> <link rel="stylesheet" type="text/css" href="/theme2a.css" id="theme2a"> <link rel="stylesheet" type="text/css" href="/theme2b.css" id="theme2b"> <link rel="stylesheet" type="text/css" href="/theme3a.css" id="theme3a"> <link rel="stylesheet" type="text/css" href="/theme3b.css" id="theme3b"> <style> h1, h2 {font-weight: normal;} .reduced {font-size: 75%;} </style> </head> <body onload="loadTheme();" class="TText"> <script> function getcookie(key) {return document.cookie.replace(new RegExp('(?:(?:^|.*;\\s*)'+key+'\\s*\\=\\s*([^;]*).*$)|^.*$'),'$1');} function loadTheme(){ var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1"); if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz'; var ent=""; var d=new Date(); if(thm[0]=='z') { var m=d.getMonth()+1; if(m>=3&&m<6)thm='0'+thm[1]; else if(m>=6&&m<9)thm='1'+thm[1]; else if(m>=9&&m<12)thm='2'+thm[1]; else thm='3'+thm[1]; } if(thm[1]=='z') {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';} ent=`theme${thm}`; var R=new RegExp('theme[0-4][ab]'); for(var i=0;i<document.styleSheets.length;++i) { if(R.exec(document.styleSheets[i].ownerNode.id)!==null&&document.styleSheets[i].ownerNode.id!=ent) document.styleSheets[i].disabled=true; else document.styleSheets[i].disabled=false; } var thmcolor=""; switch(thm[0]) { case '0':thmcolor=thm[1]=='a'?'#f59dda':'#2f0933';break; case '1':thmcolor=thm[1]=='a'?'#9df59d':'#090933';break; case '2':thmcolor=thm[1]=='a'?'#edb47b':'#1f1205';break; case '3':thmcolor=thm[1]=='a'?'#a0cdfa':'#051933';break; } document.querySelector("meta[name=theme-color]").setAttribute('content',thmcolor); } </script> <h1><a href="/">Chrisoft</a>::Ballance</h1> <h2>Back and Forth - A Lucid Dream</h2> <h2>彷徨梦</h2> <h4><a href="bonus.html">English</a></h4> <a href="//filestorage.chrisoft.org/ballance/img/lucid.png"> <img width="630" style="max-width:100%;height:auto;" src="//filestorage.chrisoft.org/ballance/img/lucid_small.png"></a> <p> 正在阅读此文的你,可能是刚刚发现了自制关卡「彷徨梦」中的彩蛋,或者点了什么剧透的链接。如果你全靠自己就发现了彩蛋,你是真的厉害。 </p> <p> 不过实际上并没有什么奖励。作为补偿,你可以读到作者对本关的看法,还有一些有关的提示。 </p> <p> 下载页的说法是骗人的。这一关既没有多重的2010气息(图中利用了大量后来产生的机关用法,虽然基本思路确实起源于2010年),也没有那么放松。许多游戏中循环变化的机关一直是我的噩梦,现在我把这噩梦也带到了Ballance中。 </p> <p> 此关卡的基本设计思路(全部小节均在同一段路面上进行的微型关卡)实际在我刚开始试验制图时就产生了。当时制图还处在刚刚觉醒的时期,大家都在试验各种机关的怪异用法。我最后确实用沿思路制作出了一个关卡,不过它实在太短了(只有3小节,其中一个小节无实质内容)。并且等我终于完成此关时,已经有其他的制图者做出了特别优秀的作品(比如「疯狂机关II」)。与它们比起来我的这个关卡相形见绌,于是我最终把这个关卡封存了。 </p> <div style="text-align:center;"> <a href="//filestorage.chrisoft.org/ballance/img/board_virtools.png"> <img width="700" style="max-width:100%;height:auto;" src="//filestorage.chrisoft.org/ballance/img/board_virtools.png"></a> <br> Level_01_board.nmo在Virtools中打开的模样。文件最后修改于2010年12月05日10:35。 </div> <p> 时间过得飞快,Ballance从我的生活中淡出了。不过我仍然时而打开Virtools消磨无聊的时光,有时还做出了「颠覆性」的发现。但是我再也没有拾起制图这个老活。因为我已经见证了制图水平的发展,我以为靠我的创造力和工具使用水平已经做不出质量过关的地图了。 </p> <p> 然而当我从我以为已经坏掉的硬盘出抢救出这个关卡的原文件时,我完全按捺不住想要重制这个关卡的想法:毕竟如果我做的只是重制我10年前的作品,设计水平不过关兴许也是可以理解的。于是我立即把思路在电脑上画了草图,然后打开Virtools开始拼接各种零件。等关卡基本成形,我开始了脚本相关的工作:毕竟我最先发现了如何在原版游戏关卡中注入脚本,如果自己都不用就会把自己推入十分尴尬的境地。最后是又臭又长的调试。终于,「彷徨梦」诞生了。 </p> <div style="text-align:center;"> <a href="//filestorage.chrisoft.org/ballance/img/lucid_sketch.png"> <img width="480" style="max-width:100%;height:auto;" src="//filestorage.chrisoft.org/ballance/img/lucid_sketch.png"></a> <br> 设计草图。其中有明显的错误。 </div> <p> 这个关卡中包含了<b>巨量</b>的脚本,比以往发布的任何包含脚本的地图都要多。如果你将本关卡中的所有脚本删除然后保存,文件尺寸会缩小接近60%。这意味着有足足73KB的数据是脚本占用的!然而,如此多的脚本达成的目的却十分简单:无非是控制三合一变球器和一些动画而已(这也暴露出Virtools脚本在实现有任何复杂性的机关时显得十分笨拙)。我同时发现所有将脚本用于修改游戏逻辑的图中,几乎无一例外地把所有逻辑全部塞进了同一个脚本中。对于Virtools脚本这种可读性本来已经不高的脚本来说,无疑是使阅读脚本变得难上加难。希望本关卡中的脚本可以作为合理的逻辑拆分的一个示范。 </p> <p> 我从2013年起玩过的自制地图实在不多,所以我也无法估计本图在现在的难度级别上能得到几颗星。不过这张地图的确不难。尽管拿到所有分数点难度稍高,但也基本是时机问题和随机因素。以下是我对本关卡中每个小节的分析。 </p> <p> 第一小节:没什么东西。几乎是原关卡的原样复制品。随意放置各种旋转缩放的机关似乎是当年非常流行的做法。 </p> <p> 第二小节:仍然没什么东西。是原关卡的第二小节稍作修改而成的。此小节强制你用纸球通过一批沙袋。你可以完全避开所有障碍,但需要掌控时机。 </p> <p> 第三小节:一个微型谜题。通过应该不会花费太长时间。 </p> <p> 远离本节出生点的浮板不会像吊桥一侧旋转,这是有意为之。目的是减轻我这种水平不高的玩家通过此关的痛苦。 </p> <p class="reduced"> 解法相当简单:首先用石球清理障碍,然后换成木球从旁路通过,从跷跷板上返回并把它压下来。换回石球即可通过此关。 </p> <p> 第四小节:本小节有隐藏的物品,但没有藏住。如果你不感兴趣,你可以无视这整个小节。 </p> <p class="reduced"> 提示:作者拿到本小节分数点是在三合一变球器为木质时被它捕获,掉到跷跷板上,然后撞击34机关下面的箱子。如果你不幸在三合一变球器为石质时被捕获,那么你还有重试一次的机会:推动34机关的箱子返回纸球变球器。如果你连续两次失败,那就没有办法了。 </p> <p> 第五小节:抓好时机!尽量趁电梯启动前进入,否则你会被迫用石球推掉所有的箱子。另外注意躲避高空落物。 </p> <p> 第六小节:一个被用烂的了杠杆。没什么好看的,赶紧走吧。 </p> <p class="reduced"> 提示:如果想吃到本小节的分数,你必须在到达本小节前已经变成纸球。 </p> <p> 第七小节:路没了!怎么办? </p> <p class="reduced"> 提示一:开大音量。 </p> <p class="reduced"> 提示二:这其实是一些某些其他游戏惯用的手法,只是我不记得是什么游戏了。 </p> <p class="reduced"> 最终提示:风扇跟灯塔是对齐的。 </p> <p> 第八小节:恭喜通关!现在你可以欣赏(无聊的)通关动画了。 </p> <p> 其他趣事: </p> <ul> <li>我还没有完美通关过此关——没错我就是这么菜。在测试时我是按小节测试的,并且依靠了特殊脚本的帮助。</li> <li>本关卡的制作仅花费了不到3天的时间。其中有两天是在写脚本和调试脚本中度过的。</li> <li>此关在RC2版本前是没有生命球的。在多人反映被坑之后,我才加入了两个生命球。</li> <li>我在考虑制作本关卡的续集。</li> <li>本关卡的名字是洗澡时想出来的:玩家在一段路上两头跑,但没有多少时间等待。这两层意思恰好都反映在「彷徨」一词中。至于为何是梦……大概这整个游戏都是一个梦?</li> <li>在正式起名前,我使用"Level_board_rehash"或者"A Stupid Level"(愚蠢关卡)代称此关。</li> <li>如果你并没有自己找到彩蛋,但仍然好奇它在哪里的话,往下看吧。</li> </ul> <div style="text-align:center;"> <a href="//filestorage.chrisoft.org/ballance/img/lucid_q.png"> <img width="640" style="max-width:100%;height:auto;" src="//filestorage.chrisoft.org/ballance/img/lucid_virtools.png"></a> <br> 已经不能更直白了,对吗? </div> <p> <a href="./index_zh.html">返回</a> </p> </body> </html> <!-- vim: tw=80 syntax=html -->