summaryrefslogtreecommitdiff
path: root/ballance/levels/lucid/bonus.html
blob: 1c6aac0752a04000c44c2b1c501e74b6a768fcb6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<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_zh.html">中文</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>
If you are reading this, you probably just discovered the easter egg in the level "Back and Forth - A Lucid Dream", or followed a link in some random spoilers. If you discovered the easter egg all by yourself, you're super awesome.
</p>
<p>
Unfortunately there are no actual rewards. So here is your compensation: the author's comments and some hints on this level.
</p>
<p>
Contrary to the claim made in the download page, the level is actually neither very 2010-ish (it makes use of a lot of techniques used by later levels, although it did have its origin in the year 2010) nor that relaxing. Cycling mechanisms has always been the bane of my existence in a lot of games. And I'm determined to bring the pain to you, my fellow Ballance player.
</p>
<p>
The basic idea of this level, which is making a tiny level where everything happens on the same platform but you have to run back and forth, has been in my mind since I got into level making. Back then folks in the custom level community were still experimenting with weird usage of components. I did finally made a level out of that idea, however it was so short that it wasn't worth publishing (three sectors, two of which contains actual content). Also, by the time I finished the level, the custom level community has started rolling out serious creations, such as "mechanism madness II", making my level look super boring in comparison. So I just put the file away.
</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>
Virtools view of Level_01_board.nmo. The time stamp of the file is 12/05/2010 10:35.
</div>
<p>
Time flies. I stepped away from Ballance. But I still occasionally opened up Virtools when I was bored, and sometimes made discoveries that were regarded as 'groundbreaking' by others (and sometimes, myself, shamelessly). But I never picked up custom level making ever, since I have witnessed the evolution of custom levels and I don't think I have the creativity or skills to reach the 'quality threshold' anymore.
</p>
<p>
However my desire to remake this level was unstoppable when I pulled the file from my supposedly dead hard drive that randomly decided to show signs of life a few weeks ago: if all I have done is remaking a level I made 10 years ago, I have a perfect excuse to fall behind the current quality average. Also maybe I can salvage the idea by adding custom elements into the level. So I quickly started scribbling down ideas on my computer and piecing the parts together together in Virtools. I then started writing the scripts: it was me who made the discovery first, so it would be embarrassing if I don't use it myself. That was followed by a long and dull debugging session. And voilà, the level was done!
</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>
Sketch of the level. There're obvious errors.
</div>
<p>
The level contains TONS and TONS of scripts, more than any scripted custom levels released ever. I mean, if all the scripts were removed from the level, the file size would shrink by almost 60% percent, that's 73KB of my precious disk space taken up by just Virtools behavior scripts! However, what the huge scripts inside the level achieved is surprisingly little: just the morphing transformer and handling some animated parts (which also reveals that Virtools behavior script is a terrible tool to implement any less than trivial mechanisms). I've also took a look into all the levels with less than trivial scripting currently available, and almost all of them just crammed everything into a single script (which isn't really good for readability, especially when you are writing a script that's already hard to read by its very own nature). Hopefully this level also serves as an example of how to split your script logic properly.
</p>
<p>
I haven't been playing a lot of custom levels since 2013 really, so I don't have a clue where should I put this level on the current difficulty scale. However I think it's a fairly easy level. Collecting all the extra points does take efforts, but it's mostly just timing and RNG. Below is my dissection of the level.
</p>
<p>
Sector 1: nothing much. Carbon copied from the original level. Placing rotated and/or scaled parts all over the place seemed trendy back then.
</p>
<p>
Sector 2: still nothing much. It's slightly modified compared to the original. Forces you to do some maneuvering through sand sacks with a paper ball, which can be avoided altogether but requires timing.
</p>
<p>
Sector 3: a tiny puzzle. Shouldn't take too long to figure out.
</p>
<p>
The flipping tile that's farther from the spawn doesn't tilt towards the suspension bridge. This is intentional, in attempt to make this section a little bit easier for unskilled players like me.
</p>
<p class="reduced">
Solution is easy: clear the first obstacle with the stone ball, then switch to wood and get to the other side using the alternate path. Return via the seesaw, pushing it down in the process. Then switch back to stone and the sector is done.
</p>
<p>
Sector 4: There is something hidden very poorly in this sector. If you are not interested, you can safely ignore the entire sector.
</p>
<p class="reduced">
Hint: the preferred way to get to the extra point is to be caught by the morphing transformer when its material is wood. Then drop onto the seesaw and accelerate towards the box. You will get the points on impact, then you can proceed via the seesaw. If you are unfortunately caught by the morphing transformer when its material is stone, you have a single chance to try again by pushing the box through and change back to paper. If you got caught twice however, doom is upon you.
</p>
<p>
Sector 5: Timing is everything! Get to the elevator before it is started or you have to push through all the boxes with a stone ball! Also try to stay safe on the elevator and avoid anything unexpected from above.
</p>
<p>
Sector 6: Just a cliché usage of the turnstile. Nothing to see here, move along.
</p>
<p class="reduced">
Hint: you have to be in your paper suit <b>before</b> entering the sector in order to collect the points!
</p>
<p>
Sector 7: The road sunk! What's next?
</p>
<p class="reduced">
Hint 1: Turn up your volume.
</p>
<p class="reduced">
Hint 2: This is actually a cliché from some other games. I just don't know which.
</p>
<p class="reduced">
Final hint: ventilators are aligned with the towers.
</p>
<p>
Sector 8: Congratulations! Now enjoy the (not really) cool animation sequence.
</p>
<p>
Other trivia:
</p>
<ul>
<li>I haven't had a perfect playthrough of this level, cause I'm really that bad at the game. I tested the level sector by sector and with the help of special scripts.</li>
<li>The level took a little shorter than three days to make. I spent two days writing and debugging the scripts.</li>
<li>There were no extra life items in the level before release candidate 2. After receiving multiple complaints, I finally added two of them.</li>
<li>I'm actually considering making sequels to this level.</li>
<li>The name of the level is from my showerthoughts: you run back and forth in this level, but you have no time to wait. Both are reflected in the Chinese word "彷徨" (which means walking back and forth or roaming around). As for why is it a dream... maybe the entire game is a dream?</li>
<li>Before the level has a formal name, it was referred to as Level_board_rehash or "A Stupid Level" in the scripts.</li>
<li>If you are here without actually finding the easter egg, maybe you're still wondering where it is. Well, here you are.</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>
I don't have to tell you the answer, do I?
</div>
<p>
<a href="./index.html">Return</a>
</p>
</body>
</html>
<!--
vim: tw=80 syntax=html spell spelllang=en_us
-->