前言

《東方氷幻鏡》(下稱『冰鏡』)是一款 DoJa 平台的 STG,由同人社團『L-Garden』&『トッパツプラン』開發。

這部作品的特殊之處,在於它誕生在日本功能機這座『加拉巴哥之島』,儘管其製作精良,但在海外卻近乎無人問津。

這種情況,一直持續到兩年前。Keitai Archive,在這個研究日機軟體社群的努力下,這部作品得以重見天日。

令筆者驚喜的是,冰鏡不僅彈設出眾,立繪精美,而且音樂也相當出類拔萃。

在 Mobile 平台上,即便是擺脫同人的光環,冰鏡也是一款極為成熟的商業遊戲。

Title 介面


版本

冰鏡有三個版本:Trial 版,標準版,以及 Plus 版。

Trial 為試玩版,標準版包含完整的劇情,Plus 版則在 標準版 的基礎上添加了額外的功能:

標準版 Plus 版
LastWord
SC 練習模式
Alice 收取 > 60 張 SC,或者 Extra 破關 收取 > 40 張 SC,或者 Extra 破關
TypeB 收取 > 100 張符卡 預設解鎖

三個版本均為免費下載,但 Plus 版需要贊助才能激活全部功能。

在上述的 Docomo 版本之外,還有 SoftBank 版。SB 裝置因聲音晶片不同,音色也和 Docomo 版不同。此外,SB 版冰鏡也因裝置的封閉性缺乏了雲端 Replay 共享。


系統

模式

難易度選擇

劇情模式

劇情模式,即主選單的『Game Start』和『Extra Start』。玩家將在這裡享受整部遊戲的劇情。

在『Game Start』中,視玩家選擇的自機不同,遊戲也將導向三種不同的結局分歧。儘管每種文本略有不同,但它們都在指引玩家前往『Extra Start』。

如果玩家能在『Game Start』的 Normal 及以上難度中 無接關不選關 破關,那麼 Extra 將會解鎖。

Extra 無法接關,初始 Player 預設為 3,努力磨礪自我的技巧吧!

初始狀態下的『Game Start』有四種難度,且預設僅開放 Stage1,後續的 Stage,隨玩家的遊玩進程而陸續開放(每種難度的進程為隔離狀態)。

符卡練習模式

符卡練習模式

符卡練習模式,即主選單的『Spell Practice』,Plus 版專屬。這裡可以讓玩家練習在劇情模式中遭遇的各種符卡。

該模式的解鎖條件非常寬鬆:不論何種方式何種難度,只要在『Game Start』通關一次就能夠解鎖。

如果收取某一 BOSS 的符卡張數達到一個值,那麼還會解鎖巨難無比的 LastWord 面。

LW Id 統計的 SC Id 範圍 條件 BOSS Stage
107 0-5, 14-17 count > 8 Sunny 1
108 6-9, 14-17 count > 6 Luna 1
109 10-13, 14-17 count > 6 Star 1
110 18-29 count > 10 Mistya 2
111 30-45 count > 13 Chen 3
112 46-61 count > 13 Keine 4
113 62-77 count > 13 Sakuya 5
114 78-97 count > 16 Marisa Vision 6
115 98-106 count > 8 Alice Vision Ex

一個半官方攻略站的描述是『Hard 及以下全部取得即可解鎖對應的 LW』,這明顯和逆向所得的程式碼衝突。不知道這究竟是一個 BUG,還是我們獲得的版本並不是最終版。

練習模式

練習模式,即主選單的『Practice Start』,可以指定某個 Stage 進行練習的模式。

如『Game Start』那般,初始僅開放 Stage1。玩家只需在『Game Start』中透過 任意的形式和難度 通過 Stage6,即可完整解鎖練習模式。

完整解鎖的練習模式,可以從開始或者 BOSS 開始遊玩。


回放

你沒看錯,就是 Replay。

該功能基於『按幀記錄玩家輸入』實現,在 Play 時,使用記錄的資料取代玩家的實時操作。

在 1.0.3 版中,遊戲預置三個 Replay 槽位(持久化於 ScratchPad 檔中),以及十個適用於 SDCard 的槽位(com.nttdocomo.fs + SD Binding encryption)。

如果我沒有理解錯 Ciena 的 Blog,後續的版本應該有預置五個 Replay 槽位。

Replay 不僅可以自我欣賞,亦可透過網路共享,或下載他人的 Replay(HTTP GET/POST 到 PHP 埠,並支援『透過參數直接拉取 Replay 的共享路徑』)。

不過,受限於大小(DoJa 5.1 中,JAR + ScratchPad 的大小需 ≤ 1024 KB),一次最多錄製一個 Stage 或是一張 SC 練習,但這也足夠驚人。

記錄

Result 內頁

記錄,即主選單的『Result』,記錄玩家的符卡蒐集進度,高分榜,以及雜七雜八的各種遊玩資訊。

如果覺得自娛自樂過於枯燥無味,Result 的網路排行榜(幻想鄉戰績)功能也能上載自我的分數,和其他玩家同台競技。

音樂室

Music Room,在 Replay 功能的震撼下,Music Room 反倒不足為奇了。


自機

常規模式

屬性 REIMU MARISA ALICE
道具吸取半徑(低速) 30px 40px 30px
道具吸取半徑(高速) 7.5px 10px 7.5px
道具拾取半徑(實際吃到) 3px 3px 3px
判定點半徑 1px 1px 1px

博麗 靈夢

TYPE A:[追尾型] 追蹤符札廣域攻擊

TYPE B:[速射型] 正面火力集中攻擊

特殊能力:小型判定點

追尾(即『追蹤符』)非常適合清理道中雜魚,但面對 BOSS 時,表現就中規中矩了。

速射(即『封魔針』)的低速傷害非常之高,可媲美魔理沙的高爆型火力傷害。

特殊能力儘管是『小型判定點』,但在 1.0.3 版本中,三位自機的判定點均為 1Px(65536),這可能是一個 BUG。

BOMB『夢想封印』適合清彈。因為其爆炸落點需要大量的練習進行計量,如果使用不熟練,很容易都打空。

霧雨 魔理沙

TYPE A:[貫通型] 強貫穿力激光攻擊

TYPE B:[高爆型] 高爆破力彈幕攻擊

特殊能力:廣域物品收取範圍

不論從何種角度來看,都非常難以操作的機體。

缺乏誘導火力的情況下,想打中 BOSS 只能冒著彈雨突擊 BOSS。

特殊能力是物品收取範圍廣闊。

BOMB 則是震顫全螢幕的巨型激光束,攻擊一般,適合清理道中雜魚。(火力就是一切 DA⭐ZE)

愛麗絲·瑪格特羅伊德

TYPE A:[傀儡型] 手動操控人偶攻擊

TYPE B:[自動人形型] 自動人偶追蹤攻擊

特殊能力:攻擊隨移速變化

綜合能力非常強的機體,儘管不適合清理道中,但在面對 BOSS 的情況下表現可圈可點。

在恆定的情況下,低速狀態下的攻擊力>高速狀態下的攻擊力。

BOMB 為人偶群圍繞自機做圓周運動,在重疊時間內可對同一目標造成多段命中。在貼臉狀態下,能夠對 BOSS 的大部分符卡形成秒殺姿態。


火力系統

火力等級(shotLevel)

火力等級由當前 Power 分段決定,每個階段的在螢幕上呈現的視覺效果均不同。

Power shotLevel
0-31 0
32-63 1
64-95 2
96-127 3
128 4

火力裝置 (option)

機體/類型 模式 數量 角度/半徑 行為
靈/魔 高速 2 90°/270°;20px(optrad≈160) 裝置對稱配置,半徑漸進收斂
靈/魔 低速 2 18°/342°;16px(optrad≈128) 更集中配置,角度內收
魔 A 常時 2 維持 A-Laser(baseBulletId=103, moveType=2);optSpriteLv 與雷射階段同步
愛 A 高速 min(4, shotLevel+1) 約 20px 緊密環繞,受移動方向影響
愛 A 低速 min(4, shotLevel+1) 約 28px 若有鎖定目標,追蹤集中射擊
愛 B(Doll) 動態 shotLevel 可變 在「回歸—追擊—貼近」之間切換
愛 B(Doll) Bomb 中 中止追蹤並回收裝置

Stage

Stage Boss
Stage 1 Sunny / Luna / Star
Stage 2 Mystia Lorelei
Stage 3 Chen
Stage 4 Keine Kamishirasawa
Stage 5 Sakuya Izayoi
Stage 6 Marisa Vision
Stage EX Alice Vision

STG 1

道中 BOSS 為 Sunny。

在 H 及以上難度,Sunny 會釋放以下符卡:

1
日符 サンライトフォール

關底 BOSS 為 Sunny / Luna / Star。

非符階段,視自機駐留在版面左/中/右的時長,觸發的單人 SC 戰也不同:

左:Star / 中:Sunny / 右:Luna

1
2
3
E:日符 ハレハレイション
N/H:日符 ツインレンズフレア
L:日符 極光レンズフレア
1
2
E/N:月符 月夜に舞う妖精
H/L:月符 ミステリィムーン
1
E/N/H/L:星符 スターダストレイン

單人 SC 戰結束後,三妖精會一起上陣釋放該符卡:

1
2
E/N:光の三妖精
H/L:三妖精の底力

難度一般,妖精非常適合練手(笑)。

STG 2

道中和關底的 BOSS 均為 Mystia,且她在道中僅有非符。

關底,她的最後一張符卡頗具特色,完美還原了了永夜抄的夜雀盲罩。

釋放的符卡有三張:

1
2
3
E:夜符 暗き夜の囁き
N:夜符 暗き夜の怪談
H/L:怪符 フォレストテラー
1
2
E:鳥符 憂いの鳥籠
N/H/L:鳥符 魅惑の檻
1
2
E/N:暗符 ブラインドサービス
H/L:暗符 盲目のセイレーン

STG 3

道中和關底的 BOSS 均為 Chen。

Chen 的大部分符卡均以圓弧位移,這在狹窄的螢幕上是一個挑戰。

道中 SC:『式符 仙狸百計』。

關底 SC:

1
2
E/N/H:仙符 俊足天舞
L:仙符 九天玄女猫娘
1
2
3
4
E:仙符 陰符経
N:仙符 仙式陰符経
H:仙符 小国太乙神数
L:仙符 幻想小国太乙神数
1
2
E/N:仙符 瞬火至高
H/L:鬼神 多聞天招来

STG 4

關底 BOSS 為 Keine,無道中 BOSS。

實際上,自 STG 4 開始,便沒有道中 BOSS 了。

一個有趣的點:慧音的立繪和特寫分別呈現帽子的缺失和佩戴。

四張符卡均以封位為精髓,非常考驗玩家的在狹窄環境下的應變力。

1
2
E/N:始符 天地開闢
H/L:始符 天地始発之時
1
2
E/N:悲符 火産霊の誕生
H/L:天符 アメノオハバリ
1
2
E/N:想符 黄泉国の悲劇
H/L:封符 黄泉比良坂の大岩
1
2
E/N:終符 白日別の儀式
H/L:終符 三柱の御子神

STG 5

關底 BOSS 為 Sakuya。

她代表性的時停和刀彈,幾乎穿插在每一張符卡之中。

1
2
E/N:幻符 戦慄の白昼夢
H/L:幻符 発狂デイドリーム
1
2
E/N:幻符 ミラージュシフト
H/L:幻符 クリムゾンスワップ
1
2
3
4
E:銀符 ジャックナイフ
N:銀符 スペツナズナイフ
H:銀符 ダナスティナイフ
L:銀符 六徳ナイフ
1
2
3
E/N:時符 リバースクロック
H:時符 マイナス・ゼロ
L:時符 イマジナリータイム

STG 6

道中最短的一個 Stage。

關底 BOSS 為 Marisa Vision。

Marisa Vision 會在自機釋放 BOMB 時維持無敵,因而練習躲避技巧變得非常重要。

1
E/N/H/L:恋符 エトワールラプト
1
E/N/H/L:魔符 スターコンパクション
1
2
E/N:悲劇 ハムレットの鏡
H/L:迷走 エンデの大迷宮
1
2
3
E/N:天球 オーレリーズサテライト
H:天界 オーレリーズプラネット
L:天界 オーレリーズユニバース
1
2
E/N:幻想 夢映す忘却の鏡
H/L:ドリーミンレーテスミラー

STG EX

關底 BOSS 為 Alice Vision,立繪的著裝為舊作 Alice(東方怪綺談~Mystic Square)。

較之其他 BOSS,Alice Vision 的絕大部分符卡均不是固定發彈,而是根據自機的實時位置即時調整角度射擊。

Alice Vision 會在自機釋放 BOMB 時維持無敵,因而練習躲避技巧變得非常重要。

符卡方面,均以『愛麗絲夢遊仙境/鏡中奇遇』為藍本創作:

1
2
3
4
5
6
7
8
9
夢符 白ウサギの甘い夢
夢符 ティアーズプール
鏡符 ジャバウォックの詩
夢符 ブロークンハート
鏡符 合わせ鏡の死神
夢符 幸運を呼ぶ四葉
夢符 ヴォーパルの剣
夢符 迷いのダイアモンド
終焉 鏡が夢見た儚き幻想

音樂

本作的所有編曲均由 Scirocco 負責。

在 Scirocco 的個人 WEB 上,曾分發過冰鏡的 MIDI 和 MLD,但它們並未被任何的快照捕獲。

在後來,冰鏡的大部分音樂經過重新編曲,公開在了 CD 《偽幻想曲集 Another Eastern World》中。

《桜花抱擁 Cherry Blossoms Party》也有收錄一首,但經過了 Vocal 化。

Game CD
東方封魔録 ~浄土曼荼羅 氷で出来た幻の鏡
夜だから眠れない Luna noctis
サニールチルフレクション TiO2
夜雀の歌声 ~ Night Bird 夜道にて
もう歌しか聞こえない sing out for
遠野幻想物語
ティアオイエツォン wintry
懐かしき東方の血 ~ Old World First Easter Mirage Region
プレインエイジア The start of ASIA
メイドと血の懐中時計
月時計 ~ ルナ・ダイアル The lunatic knife
恋色マジック 色恋マジック
魔女達の舞踏会 ~ Magus 鏡の国の舞踏会
Romantic Children Romantic Mirror
プラスチックマインド Gold colored…
紅より儚い永遠 氷幻郷
永遠の巫女
東方妖怪小町 氷幻小町(桜花抱擁)

不同的聲音晶片,播放的聲音也不同。

根據一位玩家的回憶,KWL 中的 Standard Soundlib 非常接近 SoftBank 裝置的實際音色,903i Soundlib 則是非常接近 NTT Docomo 裝置。

Scirocco 先生的 Blog 也有過適配多種聲音晶片繁瑣之感慨。

即便是封閉的日本功能機,也在滋生截然不同的混亂。

劇情

有關魔理沙的記憶,在靈夢和愛麗絲的腦海中變得紊亂。

魔理沙本人也覺察到了這種異常,於是,三人不約而同地開始尋找擾動的源頭。

這就是整個遊戲的核心劇情。

擾動的源頭,來自魔理沙從紅魔館『借』出的一面蘊藏魔力的鏡子。

因為館主是吸血鬼,所以這面鏡子在館內並不能夠映照出任何的身影。

不知鏡子被雪藏了多久,它逐漸滋生了靈智。

正好,魔理沙的窺視讓鏡子開始奪捨魔理沙的身體。

……

有趣的劇情,不是嗎?

同年發售的星蓮船,對冰鏡中鏡子的本質也有所提及:付喪神。

被遺棄,卻渴望映照他人的鏡子,經年累月,在東方的世界觀下產生靈智也不足為奇了。

這可能是第一款涉及付喪神的東方同人遊戲,儘管遊戲中並未明確指出。

最後附上遊戲的 README 文本(來自官方 WEB):

README

幻想郷は平和だった。

博麗神社の巫女、博麗霊夢もまた、平和にお茶を飲んでいた。
相変わらず参拝客の居ない神社ではすることもない。
ここ数日は大結界の様子を思い出したように眺めつつ、お茶をすするのが日課となっていた。
その寂れた境内に見慣れた姿が一つ。黒い魔法帽を被って手を振る姿は、確か、

霊夢「魔理沙……よね? うん、魔理沙だわ」
魔理沙「うん? 私は私だぜ?」
霊夢「うーん、ぼけたのかしら。一瞬名前が出てこなくて」
魔理沙「怠けてるから脳が回ってないんじゃないのか? 最近は何もなくて平和だからな」
霊夢「何もないほうがいいに決まってるわ。それとも厄介ごとが多いほうがいいっていうの?」
魔理沙「いや、私も忙しいのは御免被るぜ」
霊夢「ほら、だから今のままでいいの。ただでさえ最近忙しかったんだから」

巫女は本来神社に務めるものであり、便利屋ではない。ここのところの事件の多さから
本業と副業が逆転していたが、これこそが本来の形なのである。
もっとも、戻したから参拝客が増えるわけではない。相変わらず巫女の仕事は開店休業だった。

霊夢「ところで、何か用があってきたんじゃないの?」
魔理沙「いや、しいて言うなら帰りに茶を飲みたくなって立ち寄っただけだぜ?」
霊夢「ここなら飲めるとでも?」
魔理沙「そう思うから来たんじゃないか。生憎、外したようだけどな」
霊夢「まったく……茶菓子まで期待してたら追い出してたところだけどね、はい」
魔理沙「お、すまんな」

注がれたばかりのお茶に口をつけながら、魔理沙が取り出した一冊の本。
霊夢が呆れてため息をついた。年季の入った見慣れないグリモアを見れば、
魔理沙が何をしてどこから帰ってきたかは明白だった。
おそらく今頃図書館では、喘息持ちの魔女が不機嫌に紅茶でも飲んでいるのだろう。
やがて魔理沙が立ち上がった。湯飲みはすっかり底を見せている。

魔理沙「邪魔した」
霊夢「そう思ってるならお賽銭でも入れてってよ」
魔理沙「できればツケで頼むぜ」

使い込まれた箒で魔理沙が空へと浮かぶ。後ろから小言でも言われると思ったのか、
そのまま全速力で魔法の森へと飛んでいってしまった。その姿がかすむ。
霊夢が目をこすっている間に魔理沙は見えなくなっていた。足の速さを少しねたみながら、
湯飲みを片付けようとして。
グリモアがおきっぱなしになっていることに霊夢は気がついた。

翌日、霊夢は気乗りしないまま紅魔館へと足を運んだ。魔理沙の置き土産を片手に、
大図書館の重い扉を開く。

パチュリー「あら、珍しいわね。巫女がこんなところになんの――」
霊夢「魔理沙が神社に忘れていったわ。ここの本でしょ?」

興味もない、という風に霊夢が本を差し出す。パチュリーは訝しげに受け取り、
テーブルの上の本の山へ積んだ。

パチュリー「……泥棒に対してありがとう、と言う必要はないわよね」
霊夢「ちょっと待ってよ、泥棒? 私が?」
パチュリー「そうでしょう? 確かにこれは図書館の本で、しかもここは貸し出しなんかしてないわ。
にもかかわらず、外のあなたが本を持ってきた。あなたが泥棒じゃなくてなんなのかしら」
霊夢「失礼ね、ただの巫女よ。大体最初に魔理沙が忘れていったって言ったじゃない」
パチュリー「魔理沙? えーと……ああ、あの黒い魔法使いね。
確かにたまに図書館で見かけるとは思ってたけど……」

その言い方には違和感があった。なぜこうももやもやとした言い回しをするのか、
そのときの霊夢には分からなかった。

霊夢「大体、私はグリモアなんか読まないでしょ。盗むなら精々祈祷書ってところね」
パチュリー「……ふう、まあいいわ。ここにこうして戻ってきてるのだから」
霊夢「まったく、そのまま香霖堂にでも売り払っちゃったほうがよかったかしら」

文句を言いながら、霊夢は図書館を後にした。神社に戻ったら魔理沙が来ているかもしれない。
グリモアを返したと知ったら、どんな反応をするのだろうか。少しだけ興味を引かれる。

しかし結局、魔理沙はその日姿を見せなかった。次も、その次も見せなかった。
不思議に思い、霊夢が魔法の森に向かうも魔理沙に会うことはできなかった。
それどころか家にたどり着くこともできない。永遠亭の廊下に居るようだ、と霊夢は思った。
しかし歪な感じはまったくない。それが逆に不気味だった。

不意にパチュリーの反応を思い出す。
あの反応は、魔理沙のことを思い出せなかったのではないだろうか。
まさか、と言い聞かせながら自らも思い出そうとして。
霊夢は自分も魔理沙を忘れかけていることにようやく気がついた。

霊夢「魔理沙が見つからない……ううん、もう『魔理沙』を認識できているのが少ないんだわ」

さらに数日をかけ、霊夢は念入りに聞き込みも行った。
そして自分の考えが間違っていないことを確信した。
付き合いが多いはずのパチュリーやアリスですら、ああそんなやつもいたかしらね、
程度にしか思っておらず、誰それ? と返されることも多々あった。

霊夢「付き合いが長いからかなあ、私は何とか名前と見た目は思い出せるけど」

その記憶もどんどんぼやけてきているのが分かる。
もっとも、分かったところでどうすればいいかの検討など全くついていないのだが。

霊夢「……ま、とりあえず本人を捕まえるところからかしら」

幻想郷は平和だった。

大半の妖怪たちにとって、過半の人間たちにとって平和だった。
だが霊夢の幻想郷は違う。彼女の幻想郷から、何か大切なものが欠けようとしている。
退屈な時間は終わりを告げ、今巫女は何度目かの空へ飛び出した。

符卡考據(部分)

本章節的內容可能帶有強烈的個人理解,請批判性閲讀。

若有遇見不精準甚至謬誤之處,望不吝指正。

Stage1

月符「ミステリィムーン」

月光,果真會使人發狂麼?
露娜的月光很是溫柔。雖然神秘,但終究不是真實之月,所以並不會使人發狂。

  1. 出自《東方永夜抄》的 Extra 名『月色使人發狂』。

  2. 在《狂氣之瞳》的裡音樂評論中,也有間接提到『人類直視真實的滿月會發狂』。

光の三妖精/三妖精の底力

三人協力製作的彈幕。
即使是協力製作的彈幕,最辛苦的搞不好是桑尼。
實不相瞞,即使合力,力量也遠不及一個妖怪。畢竟是妖精嘛。
偶爾好像也有擁有強大力量的妖精。若是有四只妖精,又會如何?

  1. 冰鏡中,Sunny 在版頂的中心,負責調度左右兩隻妖精的彈幕。

  2. 若是有四隻妖精,又會如何?鑒於冰鏡的發行年代比《紺珠傳》要晚 6 年,所以這不可能指『克勞恩皮絲』,或者兩年之後的『愛塔妮緹拉爾瓦』(儘管是常世神)。這可能只是一個巧合(嗎)。


Stage2

暗符「夜雀的盲宴/惑魂的賽蓮」

光顧個路邊攤,附送的服務竟是失明。才不需要那種東西!
據說白天遇見夜雀會得夜盲症,不過在天黑前回家不就好了麼?
雖然夜雀不是賽蓮,但做的事情卻如出一轍?
不過,沒聽說過有賽蓮在路邊攤賣八目鰻的。

  1. 在《文花帖》中,Mistya 會將路人變成夜盲,然後出售可以解除夜盲的烤鰻魚。

  2. 賽蓮是一種透過歌聲引誘海上水手觸礁沉沒的妖怪,這點和米斯蒂婭的能力(使用歌聲迷惑人類)不謀而合。


Stage3

仙符「九天玄女貓娘」

將中國神話中天女的名字稍作修改後得來的名字。喵鳴。

  1. 九天玄女,相傳是中國古代人頭鳥身的女神。

  2. 貓娘,日式 ACG 流行文化中常見的角色造型。

仙符「陰符經/仙式陰符經/小國太乙神數/幻想太乙神數」

來回移動的彈幕,從某種意義上感覺比反射還難看穿。
稍微加入了一點橙的獨創要素。不過沒什麼變化。
太乙神數即是所謂的占卜。用彈幕來窺看小國的未來。
幻想鄉的未來,是誰也無法占卜的。今後究竟會如何?

  1. 陰符經,又名『黃帝陰符經』,述天地陰陽之事。

  2. 太乙神數,中國古代占卜術之一。

鬼神「多聞天招來」

鬼神「多聞天招來」

  1. 多聞天,即多聞天王,四大天王之首,在日本被稱作『毘沙門天』。

  2. 同年發售的《星蓮船》中,也有在設定文檔中提到毘沙門天本人。劇情中,毘沙門天的信徒(聖白蓮)和弟子(寅丸星,納兹琳)也有登場。


Stage4

始符「天地開闢/天地初發之時」

指世界開闢之事。
實不相瞞,周圍的彈幕是以鳥居的形狀為印象。
天地開闢之後,化為天地開始運行之時的事。
若是連鳥居都化為彈幕射過來,那就避無可避了。

  1. 天地開闢,日本神話中天地初開之景。

  2. 天地初發時,即天地開闢之後,諸神開始出現的時間點。

悲符「火產靈的誕生/天之尾羽張」

火神迦具土誕生的瞬間,與此同時發生的,是伊邪那美之死。
誕生之際便被殺害的不幸火神,他本應是無罪的。
殺害迦具土的十拳劍。彈幕之劍纏繞著火焔襲向玩家。
殺害迦具土的十拳劍,此刻周圍早已是一片火海。

  1. 迦具土,日本神話中的火神,其出生時灼傷母親 伊邪那美,致其死亡。

  2. 天之尾羽張,伊邪那岐 因妻子 伊邪那美 之死而悲憤,用來斬殺其子 迦具土 的十拳劍。

想符「黃泉國的悲劇/黃泉比良坂的大岩」

追著本應已死的伊邪那美,前往了黄泉之國。
不幸的,是看見了腐爛妻子的伊邪那岐,還是被看見了樣貌的伊邪那美?
為逃離妻子,伊邪那岐用巨岩堵住了與黃泉國的入口。
這個彈幕,就是在巨岩的縫隙中閃避的吶。

  1. 黃泉比良坂,葦原中國與黃泉之國的邊界。

  2. 伊邪那岐 來到黃泉之國,想帶 伊邪那美 回去,卻因違背約定偷看其腐爛之軀,導致夫妻反目,最終 伊邪那岐 以巨岩封印了兩界的通道。

終符「白日別之儀式/三柱之御子神」

在筑紫國進行禊祓之事。
明明是在洗滌汙穢,彈幕卻如此美麗。那是因為衆神將由此誕生。
洗滌黄泉汙穢之際誕生的三位神明。
伊邪那岐的故事到此為止,故為終符。

  1. 伊邪那岐自黃泉國歸來後,為洗淨污穢,於筑紫國進行淨化儀式。

  2. 淨化污穢之後,三位神明由此誕生:天照大神,月讀尊,素戔嗚尊。


Stage5

銀符「六徳ナイフ」

速度駭人的飛刀,數量也相當驚人。

  1. 六徳,りっとく,中文數字,十的負十九次方。

時符「マイナス・ゼロ」

時鐘倒回過頭而時空穿越。時間的彈幕隨之襲來。

  1. マイナス・ゼロ,日本作家 広瀬正 的同名科幻小說。

Stage6

ハムレットの鏡

全方位襲來的子彈浪潮,無法破壞其源頭,著實難受。
明明是鏡子的名稱,彈幕卻不成對。不擅長。

  1. ハムレット,即『哈姆雷特』。

  2. 《哈姆雷特》有云:戲劇表演就如同舉起鏡子一般觀照自然。

天球「オーレリーズサテライト/オーレリーズプラネット/オーレリーズユニバース」

首先是衛星。相對單純的彈幕集錦。
密度上昇。習慣了的話就沒那麼難受。
行星。彈幕的模式相同,但很棘手麼?
宇宙。實際上是我中意的符卡之一。

  1. オーレリー,Orrery,即『太陽系儀』。

  2. 三張 SC 分別對應了『衛星儀』『行星儀』『宇宙儀』。

幻想「夢映す忘却の鏡」/「ドリーミンレーテスミラー」

本應獨一無二的東西,若是複數存在了會如何?
近乎詛咒,會使對象的存在變得稀薄,但有波動。
幕後故事:『該如何讓魔理沙當上最終頭目?』,結果,便是創造出一個偽者。
續・幕後故事:『偽者』的本質,即是鏡之付喪神,這便是標題中『鏡』字的由來。

  1. 無需補充,裡符卡說明的文本非常有價值 :)

夢符「白兔的甜蜜之夢/淚之汪洋/Jabberwock 之詩/破碎之心/對鏡之死神/呼喚幸運的四葉草/Vorpal 之劍/迷茫之鑽/鏡中所見的夢幻泡影」

愛麗絲追著白兔,前往了不可思議的世界。
流下的淚水化為海洋,滿溢了整個房間。
怪物 Jabberwocky 的彈幕具象化。與『新娘』截然不同。
因痛苦之事而瀕臨破碎的心。[紅心]
據說在鏡之彼端看見了死神。[鬼牌]
四葉草,當真會呼喚幸福麼?[四葉草]
斬倒了怪物的劍,也斬下了劍士的頭顱。[黑桃]
實際上是初次出現的時符。[方塊]
幻鏡所見之夢也到此為止。那麼,鏡子究竟是誰?

  1. BOSS 為鏡像愛麗絲(Alice Vision),SC 名均取自《愛麗絲夢遊仙境》《愛麗絲鏡中奇遇》。

  2. SC1:來自夢遊仙境的《Down The Rabbit Hole》。

  3. SC2:來自夢遊仙境的《The Pool of Tears》。

  4. SC3:來自鏡中奇遇的鏡像詩《Jabberwocky》。Jabberwocky,即詩中記錄的空洞巨龍。

  1. SC4:來自夢遊仙境,The Queen of Hearts 對 Knave of Hearts 的不公審判。

  2. SC5:鬼牌,即 Joker,隱喻隨時會因蘇醒而破碎的夢中世界。

  3. SC6:四葉草,即三葉草(梅花)的變種。梅花則在夢遊仙境中代表 士兵。未知。

  1. SC7:來自鏡中奇遇的鏡像詩《Jabberwocky》。詩中英雄以 Vorpal 斬下了 Jabberwocky 的頭顱。黑桃則在夢遊仙境中代表 僕人。未知。

  2. SC8:方片,在夢遊仙境中代表 朝臣。時符,實際上在冰鏡中,不僅是初次出現,也是該作唯一的時符。

  3. SC9:來自鏡中奇遇的《Which Dreamed It?》。『鏡子究竟是誰?』則呼應了原文末尾的『Which do you think it was?』。


「エンデミオンの願い」

彈幕賦予的永遠長眠。願望實現了麼?

  1. エンデミオン,即 恩底彌翁,月神(Luna)塞勒涅之夫。

  2. 塞勒涅向宙斯請求賦予恩底彌翁永恆的生命,但代價是永遠的沉睡。

「妖式 -雷公式-」

本是與妖怪一同失傳的式占四式之末,在幻想鄉卻依然是現役之術。

  1. 式占三式:太乙神數、奇門遁甲,大六壬。

「偽幻想史 -アナザーヒストリー-」

東方二創的歷史,恐怕連慧音也無法盡數掌握……罷。

  1. アナザーヒストリー,即異聞錄。二創的歷史對於慧音而言,可能是一段異聞。

「アリスインナイトメア」

惡夢的世界。實際上不到最後,愛麗絲是絕對不會落敗的。

  1. 來自同人電子遊戲《愛麗絲驚魂記》。

移植

專案地址:https://github.com/Magstic/Touhou_Misfortune_MirrorS_Tale

移植的核心是把 DoJa API 替換為純粹的 MIDP API。

說起來容易,但若是想獲得一個真正方便維護的專案,難度會幾何增加。

冰鏡的核心邏輯均在一個大約三萬行的大類中,這種非模組化的原始 JAR 非常……難看。

在整個過程中,99% 的程式碼整理工作均由 AI 完成……我只負責 TODO 和 DEBUG。

這不是玩笑。因此,這個章節的描述不會涉及過度的技術細節。不為按圖索驥,只為提供思路。

測試,規劃

正如常規的 DEV 流程那般,為即將移植的程式寫計劃書是一個好習慣。

這僅需多次遊玩原遊戲,分析總結其各個系統,最後整理為 TODO LIST。

因為有實際遊戲的存在,所以這並不和從零開始開發那般抽象。

一般來說,計劃書的內容越詳細,在 AI 協助的情況下,對專案的掌控力量就越強。

我認為這是一個僅可領悟,不可言傳的必經之路。

資產解析

DoJa 常見的資產格式總結如下:GIF,BMP,MLD,JAR,ZIP。

我們來看冰鏡的資產。

冰鏡的資產(圖形/音樂)均存在於 ScratchPad 中。

ScratchPad 是一個可隨意讀寫的區域,因而,解包的方式非常簡單,按照檔頭進行解析即可。

最終,我們可以得到 96 個 GIF,以及若干個打包了 MLD 的 ZIP。

在 96 個 GIF 中,可以看到有的 GIF 為 1x1 的點。這不是解析錯誤,而是原始的程式碼會在 JVM 中動態生成現有圖像的變色體。(如:Stage Extra 的背景,初始圖形為 077.gif081.gif,程式碼會基於這兩個圖形,生成三個不同的顏色變體交替滾動)

庫解析

這不是函式庫,而是遊戲預先打包的 cc.datstage.dat

  • cc.dat:精靈的裁切表
  • stage.dat:關卡的執行腳本表

實現邏輯的解析也非常簡單,在反編譯之後的程式碼中找出對應的解析模塊,然後抽成兩個單獨的工具類即可。

若是程式內預作了這類庫,能夠簡化部分的移植流程。

當然,若是想實現最大化的適配 MIDP 真機,那幾乎繞不開重寫 cc.dat,因為原版的精靈塊基本上都是 240x240 的圖形,哪怕僅僅在 JVM 中載入五張,對 STG 那也是毀滅性的打擊。

彈幕函式的解析

雜魚 和 BOSS 的發彈邏輯,均由程式碼驅動。

發彈邏輯的移植也非常……麻煩。特別是 BOSS 多階段驅動型的符卡,即便是有 AI 協助,也需要經歷無數次的 ant run,才能確保抽取的邏輯確實和原版一致。

數值系統的分析和搭建

這一步的核心是從反編譯的程式碼中,將有關數值系統的全部方法摘出來分析。

冰鏡是一款東方 STG,那麼自然無法脫離:

  • 分數獎勵的規則
  • 殘機和雷的獲取規則
  • 機體的解鎖規則,各項屬性
  • 符卡的解鎖和收取規則

基本上都是重複且無聊的工作,因此只需將『測試,規劃』中總結的相關數值模塊的部分交給 AI 即可,但一定要對關鍵的程式碼值進行多次審核。

Replay, RMS 的重寫

因為 MIDP 不依賴 ScratchPad,所以,Replay 系統的重寫也必須要做。

這同時,也牽扯到 RMS 系統的重寫,如何實現高效的 REP 存儲是一個問題。

我最終選擇了 9 個 REP 槽位,這是一個比較合理的值。

在 電子方小白 的建議下,我也為 REPPLAY 製作了藍牙共享,聽起來簡直太棒了。

現在預留的還有一個 WEB 共享,但這意味著我必須分發 JAR,並做混淆和加密,以及伺服器的租賃和握手驗證……這個任務非常糟糕……

現在我依然寄希望能夠聯絡到 L-Garden,畢竟脫離了原作者的許可,不論移植是否出於『FREE』,在同人圈內始終如一柄達摩克里斯之劍高懸於頂。

Audio 系統的重寫

原版使用了 MLD,且甚至是 MFI2+ 規範的 MLD,現有的工具基本無法正確轉換。

在一位朋友的幫助下,我得到了冰鏡和遊雀的全部 MID……不過這位朋友要求匿名,我只能遺憾隱去其名(Scirocco 先生明確禁止二次分發。此外,禁止無斷二次分發也是整個同人圈內約定俗成的規則)。

原版的 MLD 有循環點。在 MIDI 上該如何處理呢?

個人認為最棒的方式,是將 MIDI 切為兩半,前半部分播放之後丟棄,只留後半部分 LOOP。

冰鏡的 MIDI 內有很多控制符,我不得不花大量的時間去分割,一遍遍地聽流暢度。

音效方面,則需做好節流,不然即便是模擬器,也有概率凍結畫面。

I18N,位圖字庫

這屬於純粹的 MOD 功能,但必須做:

  1. I18N:如果使用者有多語言的需求,那麼 修改 & 分發 JAR 的現象可能很快發生;
  2. 位圖字庫:令字體在所有的裝置上,都能維持恆定且舒適的比例。同時,也可有效避免真機不支援半角字元集導致的『口口』問題。

I18N 使用了傳統的工具類 + KEY,位圖字庫的構建則是從『Fuson pixel 12px』子集化並取模,構築流程均囊括在了自訂的 build.xml 中。

build.xml 透過調用 tools 下的 I18nPackBuilder.javaFontDatBuilder.java,從而實現了一套完整,且易於隨時修改 I18N 文本的構築鏈路。

如果因錯誤的原因,build.xml 未能夠執行 tools,I18N 文本也會直接打入 JAR ,但會直接使用系統字體的 fallback。顯示效果很糟,但好過構築失敗徹底崩潰。

BUG 修復

BUG 修復,從移植角度而言,這不算忠實,但可以獲得更為良好的體驗。

如果有興趣,可以去看 Issue 的 TODO,這裡不再贅述。

MOD 功能

這一步,基本就是自由發揮。

在不破壞原有功能和遊戲性的前提下努力吧。

缺憾

現在的冰鏡只能在 NOKIA S60V3+ 的裝置上工作,因為智能機的 JVM Heap 是動態分配的。

我忽略了 System.gc 的規劃,以及沒有重寫 cc.dat,這導致尋常的 2MB JVM Heap 完全不夠用(我對 J2ME 的 JVM 太樂觀了orz)。

在之後的遊雀移植中,我重寫了 SpriteCut,這讓它可以較為流暢的執行在 1.5MB Heap 的裝置上。

未來也會進行冰鏡的重寫,不過需要很長時間來計劃每一處資源的載入和回收。

尾聲

時隔一月有餘,這篇貼文終於蹉跎完畢。

撰寫貼文最痛苦的地方在於 中斷重拾

冰鏡是我的第一個 J2ME 移植專案,也是我深入理解 J2ME DEV 的敲門石。

GPT 5.2 對我的幫助非常大,但它非常喜歡小型修補,有一次我犯了疲倦,再次回到 PC 前,ant run 的很好,但它已經把核心邏輯都塞到了 GameCore 中,大約一萬行。

怎麽辦?拆方法做薄封裝唄。最終勉強拆到了 5000 行左右,總算是讓它可以『勉強』作為一個純調度類了。

在之後的遊雀移植中,因為我時刻 TODO 盯梢,這種情況總算是沒有再次發生。

……

好了,回到貼文本身,我感覺依然有很多地方沒有講述,但是我現在實在想不起更多了。

忘記了,符卡的考據,我回去寫一個章節再回來繼續寫尾聲吧。

現在終於寫完了,不過,缺少配圖。我不喜歡在貼文中使用圖片,不過這次還是加一些吧~

話說,我沒有注意一直在循環 TFV 的 Human Road,現在只感覺,頭暈目眩。

之後,我應該會把這篇貼文的內容取重要部分譯到 Keitai Wiki 上,它已經非常之完整了(吧)。

參見

東方氷幻鏡 GUIDE 訪問 Null
Keitai Wiki 訪問 Null
Sciroccoのblog 訪問 Null
L-Garden 訪問 Null