Entries

【夢幻的規則】前言 & State Overflow的簡介 (512Overflow)

※前言
其實會開始寫和兇惡相關的一些文章、
對自己來說
主要都是設計乖女兒設計的沒甚麼頭緒
然後又一段時間沒有更新部落格
所以思考一下之後
可能發點甚麼有意義的東西來消除廣告

而真的有心想要研究這塊但是不知道該怎麼入門的人
也可以看看我寫的這些東西。
如果能讓這些人學到東西,我很開心
如果發現我提到的東西哪裡有錯,
也可以在下方留言一起討論。

※在開始之前應該準備好的心態

MUGEN凶惡領域是個特殊而意外迷人的領域
同時也是個競爭演算法的領域
不過時常不少人、甚至是作者、
過度迷戀在這個領域、
而使得人物本身失去了更可貴的意義

研究凶惡相關事物應該抱持的是"追求可能性"的心態、
除了最常見的追求最強的可能性之外
還有最有效率的可能性、
其他方法相同效果的可能性、
容量最低化的可能性、
等等很多。

追求最強只是眾多選擇的其中一支,並不是絕對。
請時時刻刻提醒自己真正想追求的事物是甚麼。

好好的想清楚再進行任何的研究。
是想要發現更有效率的演算法?更不容易出差錯的判別方法?
或是新穎的操作手段?
或者單純想知道自己在這方面有多少能耐?

或者是、
單純覺得"好像很厲害"所以內心有股跟風的衝動?
然後目標是做出一樣能"那麼厲害"
不過離開MUGEN之後甚麼都不是的"作品",
但是性質類似病毒那類的"東西"?


請好好地問問自己、
自己真的想做的東西是甚麼?
在自己心中、真正的"好人物"的樣子是如何?
是一個不如Flash動畫開幕不到幾秒鐘就結束的獨角戲?
還是離開MUGEN就缺乏意義的大量無謂程式碼?
還是鑽研相當於作者智慧結晶的"演算法"本身?
或者,是一個自己用心做出來的"孩子"?


提到這個,
我個人其實很排斥這些在MUGEN中出現對記憶體進行深度操作的手法,
尤其是在只是追求"最強"而不是追求"可能性"的研究者手中出現的時候.
這些深度記憶體操作的動作,其實伴隨著相當大資訊安全危險性。
但是許多人只是一頭熱的喜歡、遊玩這些東西。
但並不熟悉、甚至不曉得這些背後的風險與危險性。
很多人因為MUGEN是個遊戲引擎而抱持輕鬆心態來看待這些東西
但實際上有不少內容其實是不能開玩笑的。

關於這部分在日後預計會寫的親捏造與%n的文章中會詳細說明。
提到該部分的時候會順便提一下DEP是甚麼東西。
希望讓看到這些文章後繼續進行相關研究的人
能了解自己該為自己撰寫的東西負起甚麼樣的責任。
而不是最後出狀況才裝無辜的說:
"我怎麼知道這會這麼嚴重?我不知道這東西會讓別的電腦怎樣怎樣"
甚至說出:
"你自己要下載下來用的,怪我囉?"
這種被所有人所共同唾棄的不負責任態度。


只是單純想要贏、只是追求最強、
或者更糟糕的有些人想透過研究這個來"成名"
基本上我敢保證,
以這種出發點去鑽研的人、
最後只會得到空前無比的空虛。

我的文章比起想要教會人怎麼使用、
更多的是讓人清楚這些是甚麼原理。
因為前者那種能隨便抄個路人人物就能辦到的事情
對我而言沒甚麼特別執筆的意義。

我不希望看過我所寫的文章所入門的人
最後淪為和現在許多凶惡向的新人一樣、
做出除了殺傷力之外一點特色都沒有的無聊人物。


請按下"繼續閱讀"↓。


※必要知識:
要約略知道MUGEN的Statement的運作方式。
要約略知道一些電腦科學中的簡單概念。


※MUGEN中的State Overflow?
MUGEN對於每個Player都有各自分配獨立的記憶體領域
去存放各別Player的資訊在裡面。

可以這麼去想像這件事情:
記憶體就像個有超多格子的超大櫃子。
而這些櫃子其中一部分會存放角色資料,
像是life、alive、power、time、hitpausetime、supermovetime.....
等等很多很多東西在裡面。
而這些資料會是照著某種順序排列的。

而其中,有一項名為"persistent"的資料也會存放在裡面
persistent是一個用來判斷是單一Statement條件滿足次數的計時器。
而且是每個當Frame有執行trigger檢查的Statement
都會個別有著獨立的persistent來做記錄。

以如下狀況來說:
[Statedef 200]

[State DreamLuz, St1]
type = PlaySnd
trigger1 = !time
value = S100,0
persistent = 3
ignorehitpause = 1
[State DreamLuz, St2]
type = ChangeState
trigger1 = !AnimTime
value = 0
ctrl = 1
persistent = 12
ignorehitpause = 1

在Stateno = 200的內容下,
有著兩個Statement(第一個是PlaySnd、第二個是ChangeState)
他們各自的persistent會個別存放在mugen的記憶體當中。

知道大概persistent是甚麼東西
而且知道會按照順序放在記憶體某處之後,
接下來請看這份文件:

這是一份相當詳細的記憶體分配的表單,
是一位嫻熟記憶體操作的有名作者Lunatic氏
所撰寫的一份文件:
【lunaの倉庫】512オーバーフローバグ表

在文件第44行可以很明顯地看到
MUGEN分配了512個格子專門來存放persistent
而MUGEN本身有著單一Statedef下最多只能有512個State的限制、
因此一般情況下,我們在人物文件程式碼中寫的persistent
都會正確地放在該放的512個格子當中。
即使寫超過,也會出現錯誤。

△ 小逝在進入超過512個State的Stateno 40000時出現錯誤

一般的情況下
在超過512個State的時候都會被MUGEN的檢查機制給擋下來
不過有人發現,
當執行超過512的程式碼的單位本身hitpausetime不等於零的情況下
這個檢查機制會莫名的失效。

而這種超過原有State限制個數卻還繼續執行沒有中斷的情況
就是MUGEN中的State OverFlow,
而因為在MUGEN中限制是512個,因此又被稱為512Overflow。

※512Overflow所能辦到的事情:
如同上面提到的,MUGEN原先在超大櫃子當中
分配了512個櫃子給每個人物存放個別的persistent的值
而persistent值是我們可以在人物文件中任意指定的。

那麼,在State超過的情況下,
"第513個persistent"要存放在哪裡呢?
沒錯,就是在第512個櫃子的"下一個櫃子"裡。
而很明顯的從上面提供的記憶體分配結構的資料可以看的出來
第513~第516的櫃子是存放"time"用的

也就是說"把第513個State中的persistent存放到記憶體中"的動作,
其實等同於修改time這個值的一部分。

理論上這也意味著,我們可以透過"寫第513個State以後的persistent"
讓記憶體中任何位於persistent後的欄位改寫成任意值。

這就是512Overflow所能辦到的事情。

這時候,請回去看看上面的表格:
alive、time、palno、parentID、ParentPointer這些東西
全部都存放在persistent的後面
因此就出現了超即死、Alive偽裝、蘇生、Time偽裝、Palno操弄
、親ID變更、親捏造
等等這些在MUGEN中時常聽到的特殊操作方式了。

至於實際怎麼使用怎麼使用的這點

@ひたち氏是一位對512Overflow相當熟悉、
並且也有著耐心將自己的知識撰寫成文章的優秀作者之一。

他的部落格有著相當簡單而且清楚的文章介紹,
甚至有人物範本可以拿來參考,這部分就不多做說明。
這是他的部落格網址:
【@ひたち氏】@ひたちがゆく!

關於512Over的內容差不多就是這樣。

說一些題外話:
至於有些人會說這是"Null式"或者"Null法"甚麼的,
會出現這種奇怪的稱呼是因為多數作者會使用Null
來作為實作512Over的Statement的Sctrl。

而我個人認為這種方法稱呼為"512法"、"512式"會比較貼切。
我相信有耐心看到的各位在看完我的解說之後也會這麼覺得。
畢竟這個手法主軸是512Overflow而不是使用哪種Sctrl。

※相關成因與影響探討:

透過Overflow去改寫在正常情況下無法改寫的資料的這個技巧
其實是資訊安全惡意攻擊中的眾多手法之一,
只不過這個手法正好在MUGEN中可以用512的方式間接實現,
而且因為多數使用的人選擇做了無害的(只影響遊戲不影響系統)的用途
自然而然的變成目前MUGEN凶惡中時常使用到的一個方法。

其實也該慶幸當初在MUGEN中發現、
並且遊玩這方面事物的日本人是一群瞭解並遵守程式道德的優秀作者
而不是某些利用這點做出會攻擊系統、
刪除資料等等替社會製造負面產值的人渣。

這一篇文章就大概告一段落了。

日後如果又像今天一樣,
對小逝、朵慕還有愛諾仙特的技能設計得沒甚麼頭緒的話
或許會出現下一篇的解說文章,
大概就是如此。
引用此文章(FC2部落格用戶)
http://piano999.blog.fc2.com/tb.php/372-84f6d1de

引用

留言

發表留言

發表留言
只對管理員顯示

Appendix

自我介紹

Dream Chord

Author:Dream Chord
喜愛製作精緻特效的MUGEN人物、同時也是位正在學習繪圖、3D建模與音樂創作的台灣人。
目前以獨立製作心中的理想遊戲為目標逐步前進著。

喜歡節奏遊戲中的電子音樂、
曾經玩過和做過StepMania的譜面。
不過已經很久沒碰了。


❀夢境中的孩子們❀
---------------
希拉

追求永生的熾紅術士
(公開中)


---------------
姬法妮

資料還原中...
(W.I.P.)


---------------
朵慕●克露可

末日魔法使
(??? ~ 狂)

✡Work In Process
進度:31%


---------------
※非公開※
愛諾仙特

(強 ~ 凶)


---------------


(凶~神)


---------------
白翼神

,,Ծ‸Ծ,,
(強~凶)
-------------

Twitter

累積人次

連結