Created
January 19, 2025 09:54
-
-
Save caogtaa/d4cce2d913ac086ea306e31495b59003 to your computer and use it in GitHub Desktop.
Mind Force - v0.3 (PuzzleScript Script)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Play this game by pasting the script in http://www.puzzlescript.net/editor.html |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
title Mind Force - v0.3 | |
author [email protected] | |
key_repeat_interval 0.4 | |
again_interval 0.16 | |
run_rules_on_level_start | |
verbose_logging | |
======== | |
OBJECTS | |
======== | |
Background | |
(#A3FFFF) | |
#dadad8 | |
Wall | |
gray darkgray | |
00010 | |
11111 | |
01000 | |
11111 | |
00010 | |
Human | |
black #FFD9BF white blue | |
.000. | |
.111. | |
22222 | |
.333. | |
.3.3. | |
DeadHuman | |
black #FFD9BF red Blue | |
.020. | |
.222. | |
22222 | |
.222. | |
.2.2. | |
Exit | |
#71451d black | |
.000. | |
01110 | |
01110 | |
01110 | |
01110 | |
Crate | |
orange | |
00000 | |
0...0 | |
0...0 | |
0...0 | |
00000 | |
Crate_UL_C | |
orange | |
00000 | |
0.... | |
0.... | |
0.... | |
0...0 | |
Crate_UR_C | |
orange | |
00000 | |
....0 | |
....0 | |
....0 | |
0...0 | |
Crate_DL_C | |
orange | |
0...0 | |
0.... | |
0.... | |
0.... | |
00000 | |
Crate_DR_C | |
orange | |
0...0 | |
....0 | |
....0 | |
....0 | |
00000 | |
Crate_UL | |
orange | |
00000 | |
0.... | |
0.... | |
0.... | |
0.... | |
Crate_UR | |
orange | |
00000 | |
....0 | |
....0 | |
....0 | |
....0 | |
Crate_DL | |
orange | |
0.... | |
0.... | |
0.... | |
0.... | |
00000 | |
Crate_DR | |
orange | |
....0 | |
....0 | |
....0 | |
....0 | |
00000 | |
Crate_L | |
orange | |
00000 | |
0.... | |
0.... | |
0.... | |
00000 | |
Crate_R | |
orange | |
00000 | |
....0 | |
....0 | |
....0 | |
00000 | |
Crate_U | |
orange | |
00000 | |
0...0 | |
0...0 | |
0...0 | |
0...0 | |
Crate_D | |
orange | |
0...0 | |
0...0 | |
0...0 | |
0...0 | |
00000 | |
Spike | |
gray white | |
..0.. | |
..0.. | |
.010. | |
.001. | |
00001 | |
Aim | |
#1dc116 | |
..0.. | |
..0.. | |
00000 | |
..0.. | |
..0.. | |
CMark (Control Mark,和被控制物体在相同图层,暂时样子和Aim一样) | |
#1dc116 | |
..0.. | |
..0.. | |
00.00 | |
..0.. | |
..0.. | |
CMark_Spread | |
transparent | |
HumanJumpRight | |
transparent | |
HumanJumpLeft | |
transparent | |
JumpableChecker | |
transparent | |
JumpDoneMarker | |
transparent | |
Flag_MoveStopped | |
transparent | |
RMark (Rotation Mark) | |
transparent | |
is_falling | |
transparent | |
Temp | |
transparent | |
Cwize (Clockwize) | |
transparent | |
Awize (Anticlocksize) | |
transparent | |
HumanMoveLeft | |
transparent | |
HumanMoveRight | |
transparent | |
is_moving | |
transparent | |
(CMark is center) | |
P_U1 | |
transparent | |
P_D1 | |
transparent | |
P_L1 | |
transparent | |
P_R1 | |
transparent | |
P_U1R1 | |
transparent | |
P_U1L1 | |
transparent | |
P_D1R1 | |
transparent | |
P_D1L1 | |
transparent | |
======= | |
LEGEND | |
======= | |
. = Background | |
# = Wall | |
P = Human | |
O = Crate | |
E = Exit | |
* = Spike | |
╔ = Crate_UL_C | |
╗ = Crate_UR_C | |
╚ = Crate_DL_C | |
╝ = Crate_DR_C | |
┏ = Crate_UL | |
┓ = Crate_UR | |
┗ = Crate_DL | |
┛ = Crate_DR | |
c = Crate_L | |
ↄ = Crate_R | |
n = Crate_U | |
u = Crate_D | |
Player = Human or Aim | |
HumanJump = HumanJumpLeft or HumanJumpRight | |
crate_corner = Crate_UL_C or Crate_UR_C or Crate_DL_C or Crate_DR_C | |
crate_part = Crate or Crate_UL or Crate_UR or Crate_DL or Crate_DR or Crate_L or Crate_R or Crate_U or Crate_D or crate_corner | |
Holdable = crate_part or Spike (holdable专指尚未被控制的物体) | |
is_rotating = Cwize or Awize | |
position = P_U1 or P_D1 or P_L1 or P_R1 or P_U1R1 or P_U1L1 or P_D1R1 or P_D1L1 | |
(每个部位赋予连接属性) | |
Conn_U = Crate_DL or Crate_DR or Crate_D or Crate_DL_C or Crate_DR_C | |
Conn_D = Crate_UL or Crate_UR or Crate_U or Crate_UL_C or Crate_UR_C | |
Conn_L = Crate_UR or Crate_DR or Crate_R or Crate_UR_C or Crate_DR_C | |
Conn_R = Crate_UL or Crate_DL or Crate_L or Crate_UL_C or Crate_DL_C | |
object = Human or DeadHuman or wall or Holdable | |
stable = Wall or holdable or human (旋转时判定不能被侵占的格子,需要用no RMark过滤) | |
ObjectOrJump = Object or HumanJump | |
Massive = Human or DeadHuman or Holdable (受重力影响的) | |
======= | |
SOUNDS | |
======= | |
undo 21150709 | |
endlevel 33645300 | |
(human Move 12917107) | |
sfx0 16961500 (锁定holdable) | |
(sfx1 27137709 (取消选中)) | |
sfx1 76110109 (取消选中) | |
sfx2 63043704 (死亡) | |
sfx3 25391905 (跳跃) | |
sfx4 55776908 (开始瞄准) | |
sfx5 88635503 (旋转) | |
================ | |
COLLISIONLAYERS | |
================ | |
Background | |
Wall ((0,0)位置用于temp变量,会存各种东西,所以Wall单独一个layer) | |
Exit | |
Human, DeadHuman, Holdable (object except wall) | |
CMark | |
CMark_Spread | |
RMark | |
position | |
Aim | |
HumanJump | |
JumpDoneMarker | |
JumpableChecker | |
Flag_MoveStopped | |
HumanMoveLeft, HumanMoveRight | |
is_moving | |
is_rotating | |
is_falling | |
Temp | |
====== | |
RULES | |
====== | |
(在跳高的中间步骤不要移动,最高优先级取消输入) | |
[ moving Human ] [ HumanJump ] -> [ Human ] [ HumanJump ] | |
(瞄准阶段不要移动, 此时只有光标移动) | |
[ moving Human ] [ Aim ] -> [ Human ] [ Aim ] | |
(控制阶段响应up/down进行旋转) | |
[ down Human ] [ CMark no CWize ] [ no Temp ] -> [ Human ] [ CMark CWize ] [ Temp ] again (顺时针旋转,取消human移动,旋转后跟一帧计算重力) | |
[ up Human ] [ CMark no AWize ] [ no Temp ] -> [ Human ] [ CMark AWize ] [ Temp ] again (逆时针旋转,取消human移动,旋转后跟一帧计算重力) | |
(正常模式下禁止上下移动,跳跃依靠右侧有物体) | |
[ vertical Human ] -> [ Human ] | |
(瞄准阶段、控制阶段的进入、退出) | |
[ action Human ] [ CMark ] -> [ Human ] [ ] sfx1 (退出控制) | |
[ action Human ] [ no Aim ] [ no CMark ] -> [ Human Aim ] [] [] sfx4 (进入瞄准模式) | |
[ action Aim holdable ] -> [ CMark holdable ] sfx0 (选中物体,加标记) | |
[ action Aim no holdable ] -> [ no holdable ] sfx1 (未选中,退出瞄准模式) | |
(暂存横向移动,因为算重力过程重随时会清理这个状态) | |
[ left Human ] -> [ Human HumanMoveLeft ] | |
[ right Human ] -> [ Human HumanMoveRight ] | |
late [ HumanMoveLeft ] -> [] | |
late [ HumanMoveRight ] -> [] | |
(======== 重力逻辑开始 ========) | |
( | |
整体思路: 先处理重力,然后处理玩家的主动移动 + H块带动。 | |
这两个力在异形刚体存在的情况下,可能会同时出现,比如一个半边浮空的长条块,所以必须分开。优先处理重力。 | |
1. 所有单点标记下落,包括human | |
2. 不断loop让所有相关都加上下落标记 | |
3. 单点阻挡测试 | |
4. 向上传递阻挡flag | |
5. 批量清理flag的方向a | |
6. 如果还有Massive,跳过human本身的移动操作 | |
处理Human移动的逻辑和上述过程大致相同,区别在 | |
1. 单点标记只从CMark开始 | |
2. 传导只限于holdable,Human不参与。比如Human头顶着一个方块,水平移动时不会带动 | |
) | |
[moving Human] -> [moving Human] again (这句有实际意义吗?) | |
(1. 所有单点标记下落,包括human) | |
(2. 不断loop让所有相关都加上下落标记) | |
down [ stationary massive | no object ] -> [ down massive | no object ] again (物体自由下落) | |
+ down [ stationary massive | down massive ] -> [ down massive | down massive ] (下方有可能镂空,那么自身也下落) | |
+ [ down Human ] [ holdable CMark ] -> [ down Human ] [ down holdable down CMark ] (H块控制) | |
(推模式,传递给自己的其他组件) | |
+ up [ moving conn_U | stationary conn_D ] -> [ moving conn_U | moving conn_D ] | |
+ down [ moving conn_D | stationary conn_U ] -> [ moving conn_D | moving conn_U ] | |
+ left [ moving conn_L | stationary conn_R ] -> [ moving conn_L | moving conn_R ] | |
+ right [ moving conn_R | stationary conn_L ] -> [ moving conn_R | moving conn_L ] | |
late down [ human | Spike ] -> [ DeadHuman | Spike ] sfx2 (被尖刺扎死,简单点先不主动end game) | |
(3. 单点阻挡测试) | |
(4. 向上传递阻挡flag) | |
(5. 批量清理flag的方向) | |
down [ down human | humanjump ] -> [ human | humanjump ] (如果在跳跃状态,human不主动下落。这一句是修正massive规则的overkill的) | |
down [ down massive | stationary object ] -> [ massive | stationary object ] (被固定的物体阻挡) | |
+ [ stationary Human ] [ holdable CMark ] -> [ stationary Human ] [ stationary holdable stationary CMark ] (主动停止H块) | |
(推模式,传递给自己的其他组件) | |
(第2步的传导是有下落尽下落,这一步的传导是有静止尽静止) | |
+ up [ stationary conn_U | moving conn_D ] -> [ stationary conn_U | stationary conn_D ] | |
+ down [ stationary conn_D | moving conn_U ] -> [ stationary conn_D | stationary conn_U ] | |
+ left [ stationary conn_L | moving conn_R ] -> [ stationary conn_L | stationary conn_R ] | |
+ right [ stationary conn_R | moving conn_L ] -> [ stationary conn_R | stationary conn_L ] | |
(6. 如果还有Massive,跳过human本身的移动操作。先赋值,再清除,因为语法上无法使用 no down massive) | |
[ HumanMoveLeft ] [ stationary Human ] -> [] [ left Human ] | |
[ HumanMoveRight ] [ stationary Human ] -> [] [ right Human ] | |
[ horizontal human ] [ down massive ] -> [ stationary human ] [ down massive ] | |
(============ 重力逻辑 end ===============) | |
(============ 主动移动逻辑 ===============) | |
(上一帧已经确定可以跳跃,此时执行跳跃) | |
(JumpDownMarker并没有什么实际作用) | |
[ human ] [ HumanJumpRight ] [ no JumpDoneMarker ] -> [ right human ] [] [ JumpDoneMarker ] | |
[ human ] [ HumanJumpLeft ] [ no JumpDoneMarker ] -> [ left human ] [] [ JumpDoneMarker ] | |
(需要判定是否跳跃,判定前需要先进行CMark_Spread,无法跳上被CMark影响的块) | |
[ holdable CMark ] -> [ holdable CMark CMark_Spread ] | |
up [ holdable CMark_Spread | holdable no CMark_Spread ] -> [ holdable CMark_Spread | holdable CMark_Spread ] | |
+ down [ conn_D CMark_Spread | conn_U no CMark_Spread ] -> [ conn_D CMark_Spread | conn_U CMark_Spread ] | |
+ left [ conn_L CMark_Spread | conn_R no CMark_Spread ] -> [ conn_L CMark_Spread | conn_R CMark_Spread ] | |
+ right [ conn_R CMark_Spread | conn_L no CMark_Spread ] -> [ conn_R CMark_Spread | conn_L CMark_Spread ] | |
(跳跃,两个方向分开处理。使用两帧处理上跳和水平移动,以便H块能跟随移动) | |
right [ > human | object no CMark_Spread ] -> [ ^ human HumanJumpRight | object no CMark_Spread ] | |
left [ > human | object no CMark_Spread ] -> [ v human HumanJumpLeft | object no CMark_Spread ] | |
up [ > human | ] -> [ > human | JumpableChecker ] (生成一个临时节点,用于检测斜角是否有可以移动的空间) | |
[ JumpableChecker object no CMark_Spread ] [ up human humanjump ] -> [ object no CMark_Spread ] [ human ] (如果有障碍,则消除临时节点,取消跳跃) | |
right [ stationary JumpableChecker | object no CMark_Spread ] [ HumanJumpRight ] -> [ | object no CMark_Spread ] [ ] (临时节点水平检测,检测失败就删除自己) | |
left [ stationary JumpableChecker | object no CMark_Spread ] [ HumanJumpLeft ] -> [ | object no CMark_Spread ] [ ] | |
up [ > human | no JumpableChecker ] -> [ human | no JumpableChecker ] (如果临时节点被删除,取消human上移) | |
[JumpableChecker] -> [JumpableChecker] sfx3 | |
[JumpDoneMarker] -> [] | |
[JumpableChecker] -> [] | |
(至此human有可能出现left, right, up 3种情况,除了down之外的移动都标记为is_moving) | |
[ horizontal Human ] -> [ horizontal Human is_moving ] | |
[ up Human ] -> [ up Human is_moving ] | |
[ Human no is_moving ] [ CMark_Spread ] -> [ Human no is_moving ] [] (没有主动移动,清理所有CMark_Spread,后续的传递会失效) | |
(1. human的移动传递给CMark作为单点输入) | |
[ moving Human is_moving ] [ holdable CMark ] -> [ moving Human is_moving ] [ moving holdable moving CMark ] | |
(2. 不断loop让所有相关都加上移动标记) | |
+ down [ stationary holdable CMark_Spread | moving holdable CMark_Spread ] -> [ moving holdable CMark_Spread | moving holdable CMark_Spread ] (下方物体,那么自身也被带动) | |
+ up [ moving conn_U CMark_Spread | stationary conn_D ] -> [ moving conn_U CMark_Spread | moving conn_D ] | |
+ down [ moving conn_D CMark_Spread | stationary conn_U ] -> [ moving conn_D CMark_Spread | moving conn_U ] | |
+ left [ moving conn_L CMark_Spread | stationary conn_R ] -> [ moving conn_L CMark_Spread | moving conn_R ] | |
+ right [ moving conn_R CMark_Spread | stationary conn_L ] -> [ moving conn_R CMark_Spread | moving conn_L ] | |
(3. 单点阻挡测试) | |
(4. 向上传递阻挡flag) | |
(5. 批量清理flag的方向) | |
[ > holdable CMark_Spread | stationary object ] -> [ holdable CMark_Spread | stationary object ] (被固定的物体阻挡) | |
+ [ > Human | stationary object CMark_Spread ] -> [ stationary Human | stationary object CMark_Spread ] (human被固定的物体阻挡) | |
+ up [ stationary holdable CMark_Spread | moving holdable ] -> [ stationary holdable CMark_Spread | stationary holdable ] (向上传递,但是不要影响human) | |
+ [ stationary Human ] [ moving holdable moving CMark ] -> [ stationary Human ] [ stationary holdable stationary CMark ] (主动停止H块) | |
(推模式,传递给自己的其他组件) | |
(第2步的传导是有下落尽下落,这一步的传导是有静止尽静止) | |
+ up [ stationary conn_U CMark_Spread | moving conn_D ] -> [ stationary conn_U CMark_Spread | stationary conn_D ] | |
+ down [ stationary conn_D CMark_Spread | moving conn_U ] -> [ stationary conn_D CMark_Spread | stationary conn_U ] | |
+ left [ stationary conn_L CMark_Spread | moving conn_R ] -> [ stationary conn_L CMark_Spread | stationary conn_R ] | |
+ right [ stationary conn_R CMark_Spread | moving conn_L ] -> [ stationary conn_R CMark_Spread | stationary conn_L ] | |
[ moving CMark stationary holdable ] -> [ stationary CMark stationary holdable ] | |
up [ up Human | stationary object ] [ HumanJump ] -> [ stationary Human | stationary object ] [] (反向传递后,发现human被阻挡,取消跳跃) | |
[ stationary Human ] [ humanjump ] -> [ stationary Human ] [] (通过反向传递被阻挡的case) | |
[ Human is_moving ] -> [ Human is_moving ] again (跳跃后触发下一帧平行移动) | |
late [ CMark_Spread ] -> [] | |
(============ 主动移动逻辑 end ===============) | |
(======== 旋转逻辑开始 ========) | |
(旋转豁免逻辑) | |
[ CMark is_rotating Spike ] -> [ CMark Spike ] (尖刺不旋转) | |
[ CMark is_rotating Crate ] -> [ CMark Crate ] (单个的箱子不旋转) | |
[ CMark is_rotating ] -> [ CMark is_rotating RMark ] | |
(刚体传染RMark) | |
up [ conn_u RMark | conn_d no RMark ] -> [ conn_u RMark | conn_d RMark ] | |
+down [ conn_d RMark | conn_u no RMark ] -> [ conn_d RMark | conn_u RMark ] | |
+left [ conn_l RMark | conn_r no RMark ] -> [ conn_l RMark | conn_r RMark ] | |
+right [ conn_r RMark | conn_l no RMark ] -> [ conn_r RMark | conn_l RMark ] | |
(L1 position) | |
up [ CMark is_rotating | ] -> [ CMark is_rotating | P_U1 ] | |
down [ CMark is_rotating | ] -> [ CMark is_rotating | P_D1 ] | |
left [ CMark is_rotating | ] -> [ CMark is_rotating | P_L1 ] | |
right [ CMark is_rotating | ] -> [ CMark is_rotating | P_R1 ] | |
(L2 position) | |
left [ P_U1 | ] -> [ P_U1 | P_U1L1 ] | |
right [ P_U1 | ] -> [ P_U1 | P_U1R1 ] | |
left [ P_D1 | ] -> [ P_D1 | P_D1L1 ] | |
right [ P_D1 | ] -> [ P_D1 | P_D1R1 ] | |
(==CWize部分==) | |
(旋转阻挡判定) | |
[ Cwize ] [ P_U1 crate_part RMark ] [ P_R1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Cwize ] [ P_R1 crate_part RMark ] [ P_D1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Cwize ] [ P_D1 crate_part RMark ] [ P_L1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Cwize ] [ P_L1 crate_part RMark ] [ P_U1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ CWize ] [ P_U1R1 crate_part RMark ] [ P_D1R1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ CWize ] [ P_U1L1 crate_part RMark ] [ P_U1R1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ CWize ] [ P_D1L1 crate_part RMark ] [ P_U1L1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ CWize ] [ P_D1R1 crate_part RMark ] [ P_D1L1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
([ CWize ] -> message can rotate!) | |
(TODO: 旋转失败后设置rotate_stopped,播放音效) | |
(物体旋转,CWize) | |
(shift格子) | |
(RMark一起转移,后面自旋转时顺便清理掉避免重入) | |
[ Cwize ] [ P_U1 crate_part RMark ] [ temp ] -> [ CWize ] [ P_U1 ] [ temp crate_part RMark ] | |
[ Cwize ] [ P_L1 crate_part RMark ] [ P_U1 ] -> [ CWize ] [ P_L1 ] [ P_U1 crate_part RMark ] | |
[ Cwize ] [ P_D1 crate_part RMark ] [ P_L1 ] -> [ CWize ] [ P_D1 ] [ P_L1 crate_part RMark ] | |
[ Cwize ] [ P_R1 crate_part RMark ] [ P_D1 ] -> [ CWize ] [ P_R1 ] [ P_D1 crate_part RMark ] | |
[ Cwize ] [ temp crate_part RMark ] [ P_R1 ] -> [ CWize ] [ temp ] [ P_R1 crate_part RMark ] | |
[ Cwize ] [ P_U1R1 crate_part RMark ] [ temp ] -> [ CWize ] [ P_U1R1 ] [ temp crate_part RMark ] | |
[ Cwize ] [ P_U1L1 crate_part RMark ] [ P_U1R1 ] -> [ CWize ] [ P_U1L1 ] [ P_U1R1 crate_part RMark ] | |
[ Cwize ] [ P_D1L1 crate_part RMark ] [ P_U1L1 ] -> [ CWize ] [ P_D1L1 ] [ P_U1L1 crate_part RMark ] | |
[ Cwize ] [ P_D1R1 crate_part RMark ] [ P_D1L1 ] -> [ CWize ] [ P_D1R1 ] [ P_D1L1 crate_part RMark ] | |
[ Cwize ] [ temp crate_part RMark ] [ P_D1R1 ] -> [ CWize ] [ temp ] [ P_D1R1 crate_part RMark ] | |
(part自旋转,CWize,旋转时顺便清理CMark避免重入) | |
[ CWize ] [ Crate_U RMark ] -> [ CWize ] [ Crate_R ] | |
[ CWize ] [ Crate_R RMark ] -> [ CWize ] [ Crate_D ] | |
[ CWize ] [ Crate_D RMark ] -> [ CWize ] [ Crate_L ] | |
[ CWize ] [ Crate_L RMark ] -> [ CWize ] [ Crate_U ] | |
[ CWize ] [ Crate_UR RMark ] -> [ CWize ] [ Crate_DR ] | |
[ CWize ] [ Crate_DR RMark ] -> [ CWize ] [ Crate_DL ] | |
[ CWize ] [ Crate_DL RMark ] -> [ CWize ] [ Crate_UL ] | |
[ CWize ] [ Crate_UL RMark ] -> [ CWize ] [ Crate_UR ] | |
[ CWize ] [ Crate_UR_C RMark ] -> [ CWize ] [ Crate_DR_C ] | |
[ CWize ] [ Crate_DR_C RMark ] -> [ CWize ] [ Crate_DL_C ] | |
[ CWize ] [ Crate_DL_C RMark ] -> [ CWize ] [ Crate_UL_C ] | |
[ CWize ] [ Crate_UL_C RMark ] -> [ CWize ] [ Crate_UR_C ] | |
(==AWize部分==) | |
(旋转阻挡判定) | |
[ Awize ] [ P_U1 crate_part RMark ] [ P_L1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Awize ] [ P_L1 crate_part RMark ] [ P_D1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Awize ] [ P_D1 crate_part RMark ] [ P_R1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Awize ] [ P_R1 crate_part RMark ] [ P_U1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Awize ] [ P_U1R1 crate_part RMark ] [ P_U1L1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Awize ] [ P_U1L1 crate_part RMark ] [ P_D1L1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Awize ] [ P_D1L1 crate_part RMark ] [ P_D1R1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
[ Awize ] [ P_D1R1 crate_part RMark ] [ P_U1R1 stable no RMark ] -> [] [ crate_part ] [ stable no RMark ] | |
([ Awize ] -> message can rotate!) | |
(TODO: 旋转失败后设置rotate_stopped,播放音效) | |
(物体旋转,Awize) | |
(shift格子) | |
(RMark一起转移,后面自旋转时顺便清理掉避免重入) | |
[ Awize ] [ P_U1 crate_part RMark ] [ temp ] -> [ Awize ] [ P_U1 ] [ temp crate_part RMark ] | |
[ Awize ] [ P_R1 crate_part RMark ] [ P_U1 ] -> [ Awize ] [ P_R1 ] [ P_U1 crate_part RMark ] | |
[ Awize ] [ P_D1 crate_part RMark ] [ P_R1 ] -> [ Awize ] [ P_D1 ] [ P_R1 crate_part RMark ] | |
[ Awize ] [ P_L1 crate_part RMark ] [ P_D1 ] -> [ Awize ] [ P_L1 ] [ P_D1 crate_part RMark ] | |
[ Awize ] [ temp crate_part RMark ] [ P_L1 ] -> [ Awize ] [ temp ] [ P_L1 crate_part RMark ] | |
[ Awize ] [ P_U1R1 crate_part RMark ] [ temp ] -> [ Awize ] [ P_U1R1 ] [ temp crate_part RMark ] | |
[ Awize ] [ P_D1R1 crate_part RMark ] [ P_U1R1 ] -> [ Awize ] [ P_D1R1 ] [ P_U1R1 crate_part RMark ] | |
[ Awize ] [ P_D1L1 crate_part RMark ] [ P_D1R1 ] -> [ Awize ] [ P_D1L1 ] [ P_D1R1 crate_part RMark ] | |
[ Awize ] [ P_U1L1 crate_part RMark ] [ P_D1L1 ] -> [ Awize ] [ P_U1L1 ] [ P_D1L1 crate_part RMark ] | |
[ Awize ] [ temp crate_part RMark ] [ P_U1L1 ] -> [ Awize ] [ temp ] [ P_U1L1 crate_part RMark ] | |
(part自旋转,CWize,旋转时顺便清理CMark避免重入) | |
[ Awize ] [ Crate_U RMark ] -> [ Awize ] [ Crate_L ] | |
[ Awize ] [ Crate_L RMark ] -> [ Awize ] [ Crate_D ] | |
[ Awize ] [ Crate_D RMark ] -> [ Awize ] [ Crate_R ] | |
[ Awize ] [ Crate_R RMark ] -> [ Awize ] [ Crate_U ] | |
[ Awize ] [ Crate_UR RMark ] -> [ Awize ] [ Crate_UL ] | |
[ Awize ] [ Crate_UL RMark ] -> [ Awize ] [ Crate_DL ] | |
[ Awize ] [ Crate_DL RMark ] -> [ Awize ] [ Crate_DR ] | |
[ Awize ] [ Crate_DR RMark ] -> [ Awize ] [ Crate_UR ] | |
[ Awize ] [ Crate_UR_C RMark ] -> [ Awize ] [ Crate_UL_C ] | |
[ Awize ] [ Crate_UL_C RMark ] -> [ Awize ] [ Crate_DL_C ] | |
[ Awize ] [ Crate_DL_C RMark ] -> [ Awize ] [ Crate_DR_C ] | |
[ Awize ] [ Crate_DR_C RMark ] -> [ Awize ] [ Crate_UR_C ] | |
(清理临时标记) | |
[ is_rotating ] -> [] sfx5 | |
[ RMark ] -> [] | |
[ position ] -> [] | |
(======== end ========) | |
[ Temp ] -> [] | |
============== | |
WINCONDITIONS | |
============== | |
some Human on Exit | |
======= | |
LEVELS | |
======= | |
( | |
https://en.wikipedia.org/wiki/Box-drawing_characters | |
https://en.wikipedia.org/wiki/Geometric_Shapes_(Unicode_block) | |
╔╗ | |
╚╝ | |
┏┓ | |
┗┛ | |
n | |
u | |
cↄ | |
) | |
(for debug) | |
( | |
############ | |
#........### | |
#........### | |
####.......# | |
####..p....# | |
####..o....# | |
####..o...e# | |
############ | |
########## | |
#n......o# | |
#u...┏┓..# | |
#.n.p┗┛..# | |
#.uo.....# | |
#..cↄ.#..# | |
#........# | |
#........# | |
#...cↄ...# | |
#....#...# | |
#........# | |
########## | |
########## | |
#.......o# | |
#....╔╗..# | |
#...p╚╝..# | |
#..o.....# | |
#.....#..# | |
#........# | |
#.╔ↄ.....# | |
#.u.cↄ...# | |
#....#...# | |
#........# | |
########## | |
) | |
( | |
message test level 1 | |
######### | |
#......e# | |
#......## | |
###....## | |
#..*.#### | |
#.cↄp...# | |
#.o.oo.e# | |
######### | |
message test level 2 | |
######### | |
#......e# | |
#......## | |
###....## | |
#...*#### | |
#...cↄ..# | |
#.o.oope# | |
######### | |
message test level 3 | |
######### | |
#......e# | |
#......## | |
###....## | |
#...*#### | |
#.#cↄp..# | |
#.o.oo.e# | |
######### | |
message test level 4 | |
######### | |
#......e# | |
#......## | |
###..p.## | |
#...o#### | |
#...o...# | |
#...*..e# | |
######### | |
message test level 5 | |
######### | |
#......e# | |
#......## | |
###*...## | |
#..p.#### | |
#.cↄ....# | |
#.o.oo.e# | |
######### | |
) | |
message level 1-1 of 8 | |
message GieGie use mind force to control crates. | |
message X to aim, choose a crate and press X to start controlling, X again to release. | |
########## | |
#........# | |
#.p..o...# | |
####.###.# | |
#...#....# | |
#e.......# | |
##.......# | |
##.......# | |
##*****### | |
########## | |
message level 1-2 of 8 | |
########## | |
#........# | |
#.......e# | |
#.......## | |
#.......## | |
#op##.#### | |
########## | |
message level 1-3 of 8 | |
########## | |
#........# | |
#.p.o...e# | |
###.##..## | |
###.##..## | |
#####..### | |
####..#### | |
##...##### | |
##o..##### | |
########## | |
message level 1-4 of 8 | |
message GieGie cannot step up to a controlling crate. | |
########## | |
#........# | |
#........# | |
#p.o#...e# | |
######.### | |
######.### | |
########## | |
message level 1-5 of 8 | |
message GieGie can control traps too. | |
########## | |
#........# | |
#........# | |
#........# | |
#p.#*.*.e# | |
########## | |
message level 1-6 of 8 | |
########## | |
#.......e# | |
#......### | |
#........# | |
##p.o.*..# | |
########## | |
message level 1-7 of 8 | |
######### | |
#......e# | |
#......## | |
###...*## | |
#....#### | |
#...o...# | |
#p..o...# | |
######### | |
message level 1-8 of 8 | |
######### | |
#####o### | |
#####*### | |
#####*### | |
#####*### | |
#####*### | |
###..*..# | |
##...*..# | |
##.p.*.e# | |
######### | |
message Congratulations! You compelete Chapter 1. | |
( | |
╔╗ | |
╚╝ | |
┏┓ | |
┗┛ | |
n | |
u | |
cↄ | |
) | |
message level 2-1 of 7 | |
message When controlling a crate, use up/down to rotate it! | |
########## | |
#...n....# | |
#p..u..#.# | |
########.# | |
####..##.# | |
#e..cↄ...# | |
########## | |
message level 2-2 of 7 | |
(everything about 1x2) | |
########### | |
#....#....# | |
#cↄ..#e...# | |
####.##...# | |
###.......# | |
###p...#..# | |
####.###### | |
#.........# | |
########### | |
message level 2-3 of 7 | |
########### | |
##........# | |
##.......e# | |
#........## | |
#.........# | |
##........# | |
##...cↄ...# | |
##.p.cↄ...# | |
########### | |
message level 2-4 of 7 | |
########## | |
#.p.n....# | |
####╚ↄ##.# | |
#####.##.# | |
########.# | |
####n..#.# | |
#e.c╝....# | |
#####.#### | |
########## | |
message level 2-5 of 7 | |
########### | |
#.........# | |
#.........# | |
#.╔ↄ#.....# | |
#.u##.....# | |
#e#####...# | |
##........# | |
#.......### | |
#.........# | |
#.p.......# | |
########### | |
message level 2-6 of 7 | |
########### | |
#.........# | |
#........e# | |
#........## | |
#.........# | |
#.........# | |
#....╔ↄn..# | |
#..p.uc╝..# | |
########### | |
( | |
message level 2-8 | |
( | |
┏┓ | |
┗┛ | |
) | |
########## | |
###..##### | |
###...#### | |
#p.┏┓...e# | |
###┗┛##### | |
########## | |
########## | |
) | |
( | |
message level 2-9 | |
########### | |
#........e# | |
#........## | |
#.........# | |
#.........# | |
#.........# | |
#....┏┓┏┓.# | |
#.p.o┗┛┗┛.# | |
########### | |
) | |
message level 2-7 of 7 | |
########### | |
#........e# | |
#........## | |
#.........# | |
#.........# | |
#.........# | |
#.........# | |
#..n..n.n.# | |
#p.╚ↄ.u.u.# | |
########### | |
message Thank you for playing! More levels will be made... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment