骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 6603|回复: 6

[版主推荐] MOD日記 & 二日:ModuleSystem中的數據結構

[复制链接]

0

主题

51

回帖

115

积分

见习骑士

Rank: 3

UID
233716
第纳尔
248
精华
0
互助
12
荣誉
4
贡献
0
魅力
8
注册时间
2010-4-14
鲜花(4) 鸡蛋(0)
发表于 2010-4-17 04:05:19 | 显示全部楼层 |阅读模式
二日:ModuleSystem中的數據結構

遊戲對象
ModuleSystem的文件中列出了所有可供MOD的遊戲對象,除了需要瞭解他們都描述的是什麼之外,更主要的是瞭解他們之間的構成關係,以便在使用時可以更簡單清晰,減少不必要的麻煩。
下面將按照耦合度從低到高的順序列出存在的各類遊戲對象。
對象名稱:常量
描述:固定的數值,預先定義以便在後續編碼時方便使用,通常是具有邏輯含義的索引、標記或者數值。
數據結構:整形或浮點數
類別:純數據
引用資源:有可能引用其他對象索引。
定義文件:module_constants.py
輸出文件:無

對象名稱:變量
描述:可變的數值,通常用於數的計算和保存。
數據結構:整形或浮點數
類別:純數據
引用資源:無
定義文件:幾乎全部的源文件,module_variables.py
輸出文件:variables.txt——項目所使用的全局變量
          variable_uses.txt——全局變量的應用值

對象名稱:字符串
描述:一組文字。
數據結構:string,使用引號標識
類別:純數據,索引封裝數據,隱式外部數據調用
引用資源:隱式調用外部語言包(非必須)
定義文件:module_strings.py
輸出文件:strings.txt

NOTE:所謂索引封裝數據,即是由數據索引和數據本身所聯合描述的數據。
NOTE:所謂隱式調用外部語言包,即是以字符串的索引或者字符串本身為索引,從語言包的相應文件中讀取實際的文本內容。如果沒有語言包或者相應的文本內容項,則顯示字符串本身。

對象名稱:容器
描述:可以將變量按照一定順序保存在裏面,並傳遞給需要的其他對象。
數據結構:slot(指定對象的固定數據位置),reg(單個變量寄存器),pos(向量寄存器),sx(字符串寄存器)(以上四種皆為使用的索引形式,非定義)
類別:純數據
引用資源:需要變量或字符串
定義文件:隱藏,公共容器索引參見header_common.py
輸出文件:無

對象名稱:勢力
描述:一群相同或相近的個體組成的組織,為某個目標服務,或者遵循某種價值觀。
數據結構:一個勢力對象由:索引,勢力名稱,功能標籤(比如不在遊戲中顯示圖標),勢力關係變化基值,關聯的勢力關係(關聯的勢力關係由:勢力索引和關聯關係值描述,其意義即某角色與當前勢力的關係發生變化時,每變化勢力關係變化基值,關聯的勢力與這個角色的關係變化為關聯關係值),勢力等級,和勢力顏色所描述。
類別:純數據
引用資源:勢力(同種內聯)
定義文件:module_factions.py
輸出文件:factions.txt

對象名稱:路徑
描述:一個文件夾在文件系統內的絕對路徑。只用於輸出項目文件用。
數據結構:字符串
類別:純數據
引用資源:無
定義文件:module_info.py
輸出文件:無

對象名稱:技能
描述:通過動作或過程(非必須)就可以產生特殊效果的對象。
數據結構:技能由:技能索引,名稱,功能標籤(比如需要一定的素質),技能等級上限,和技能的說明文本所描述。
類別:隱式外部數據調用
引用資源:隱式調用外部語言包(非必須)
定義文件:module_skills.py
輸出文件:skills.txt
NOTE:這裡的技能都是由硬編碼編寫,所以只具有索引。自定義技能需要使用其他方式來定義技能過程和輸出效果。

對象名稱:任務
描述:讓某個角色去做些什麼事,通常會在完成後有獎勵(但檢查完成和獎勵部分不屬於任務)。
數據結構:任務由:任務索引,名稱,功能標籤,任務的說明文本所描述。
類別:隱式外部數據調用
引用資源:隱式調用外部語言包(非必須)
定義文件:module_quests.py
輸出文件:quests.txt

對象名稱:動作
描述:遊戲中各種實體的運動動畫序列。
數據結構:動作由:動作索引,功能標籤和動作序列所描述。其中動作序列又由:持續時間,動作文件名稱,開始幀位置,結束幀位置,序列功能標籤所描述。
類別:外部資源封裝
引用資源:動作的brf文件
定義文件:module_animations.py
輸出文件:actions.txt

對象名稱:音效
描述:進行某種動作時會發出的聲音。
數據結構:音效由:音效索引,功能標籤(比如設定音量),和音效列表所描述。其中音效列表包含多個音頻文件名稱,因此可以在音效播出時從中隨機播放一個以增加聽覺效果。
類別:外部資源封裝
引用資源:音頻文件
定義文件:module_sounds.py
輸出文件:sounds.txt

對象名稱:音樂
描述:具有旋律的聲音,通常用來渲染氣氛,增加沉浸感或激起玩家情緒。
數據結構:音樂(音軌)由:音樂索引,音頻文件名稱,功能標籤(比如指出自定義音樂),和播放形式所描述
類別:外部資源封裝
引用資源:音頻文件
定義文件:module_music.py
輸出文件:music.txt

對象名稱:帶圖像的網格
描述:表面具有圖像的網格對象(通常是平面),用來做位圖使用。
數據結構:網格由:網格索引,功能標籤,網格(位圖)文件名稱,平移、旋轉和縮放的偏移量所描述。
類別:外部資源封裝
引用資源:包含美術資源的brf文件
定義文件:module_meshes.py
輸出文件:meshes.txt

對象名稱:粒子特效
描述:數量眾多且相同的特效按某種軌跡出現或運動,構成如煙、雲、軌跡等視覺效果。
數據結構:粒子特效由:粒子特效索引,功能標籤,網格索引,生成速率,持續時間,衰減系數(阻尼),發散(震蕩)範圍,發散(震蕩)力度,透明度、顏色RGB、縮放比例關鍵幀,釋放範圍,釋放速度,旋轉角速度,旋轉衰減時間(從指定速度衰減到無速度的時間)所描述。其中關鍵幀由:時間比例(從0-出生到1-消逝之間的比例)和指標系數(透明、顏色為0-255,縮放為百分比等)所描述。
類別:資源引用
引用資源:網格(module_meshes.py)
定義文件:module_particle_systems.py
輸出文件:particle_systems.txt

對象名稱:大地圖實體
描述:在世界地圖上存活的遊戲實體,城市、橋樑、各類隊伍等等。
數據結構:大地圖實體由:實體索引,功能標籤,網格索引,縮放比例,音效索引,和旗幟所在的偏移量所決定。其中旗幟屬於大地圖實體的一種,由隊伍所決定使用何種旗幟,由引擎硬編碼與實體綁定(未證實)。
類別:資源引用
引用資源:網格(module_meshes.py),音效(module_sounds.py)
定義文件:module_map_icons.py
輸出文件:map_icons.txt

對象名稱:皮膚
描述:某種生物或者物體表面的樣式。
數據結構:皮膚由:皮膚索引,功能標籤,身體網格索引,腿部網格索引(左腿),手部網格索引(左手),頭部網格索引,面部形狀關鍵字,可用的頭髮網格索引列表,可用的鬍鬚網格索引列表,可用的臉部貼圖文件名列表,可用的語音對象列表,骨骼文件名稱,縮放比例,血蹟特效1索引,血蹟特效2索引,和面部關鍵字限制列表所描述。其中語音對象由:語音索引,和音效索引所描述。
# TODO:關鍵字格式和限制不明
類別:資源引用,外部資源引用
引用資源:網格(module_meshes.py),音效(module_sounds.py),外部骨骼brf文件
定義文件:module_skins.py
輸出文件:skins.txt

對象名稱:功能接口索引
描述:功能函數的調用索引。M&BMS不直接提供功能函數調用,而是給樹功能函數索引,將功能以數據的形式封裝,並在遊戲過程中按索引查找調用相應函數。
# TODO:功能接口分類,描述。
數據結構:功能接口索引由:功能接口索引,和(可能的)參數列(非列表,與索引同級)所描述。
類別:外部資源調用,潛在的全部資源調用(未證實,但已經支持很多)
引用資源:外部庫調用(隱式),全部遊戲對象資源調用。
定義文件:header_operations.py
輸出文件:以下的遊戲對象均有可能使用

對象名稱:場景實體
描述:在非大地圖場景中存活的各類實體,通常比大地圖實體更細緻,存在物理判定並可能執行特殊的邏輯。
數據結構:場景實體由:實體索引,功能標籤,網格索引,OBJ文件名稱,和功能接口索引所描述。
類別:潛在的全部資源調用,外部資源引用
引用資源:網格(module_meshes.py),功能接口索引(header_operations.py)
定義文件:module_scene_props.py
輸出文件:scene_props.txt

對象名稱:物品
描述:遊戲中的物品。
數據結構:物品由:物品索引,名稱,網格索引和網格頭銜(未知)列表,物品屬性標籤,性能,價值,屬性集合,頭銜,和附加功能(索引列表)所描述
# TODO:探索網格頭銜作用
類別:潛在的全部資源調用,隱式外部數據調用(語言包,頭銜列表(硬連接))
引用資源:網格(module_meshes.py),功能接口索引(header_operations.py)
定義文件:module_items.py
輸出文件:item_kinds1.txt

對象名稱:角色類
描述:具有相同或相似屬性的角色模板。製作群體將會在起始外觀和終止外觀間隨機生成個體,並使用複數角色名。
數據結構:角色類由:角色類索引,角色名稱,複數角色名稱,功能標籤,可能出現的場景索引(只用於獨特的角色,比如英雄),預留項,所屬勢力索引,物品索引列表,能力數值,武器使用熟練度,技能等級,外觀起始代碼,和外觀終止代碼所描述。
類別:封裝資源引用,隱式外部數據調用(語言包)
引用資源:物品(module_items.py),場景(module_scenes.py)
定義文件:module_troops.py
輸出文件:troops.txt
附屬對象:角色類升級樹
描述:由指定升級函數確定的從一類角色可以升級到某兩類角色。

對象名稱:場景
描述:各種非大地圖場景,包括城鎮、戰場、室內等。在這些場景裏會啟用物品碰撞、傷害等功能。
數據結構:場景由:場景索引,功能標籤,網格索引,BODY索引(此兩項只可用於室內場景,作用未知),最小移動點,最大移動點(此兩點構成的矩形區域限制了移動範圍,只可在此矩形內移動),海拔高度,地形代碼(結構不明,來自地形編輯器),可通往的場景(索引)列表,和場景中可以存放的角色類物品保管箱(角色類索引)列表所描述。
# TODO:探索室內網格索引作用。
類別:封裝資源引用
引用資源:網格(module_meshes.py),角色類(module_troops.py)
定義文件:module_scenes.py
輸出文件:scenes.txt

對象名稱:靜態觸發器
描述:靜態的觸發器。通常是在遊戲執行期間一直運行。
數據結構:靜態觸發器由:檢查時間間隔和功能接口列表所描述。
類別:潛在的全部資源調用
引用資源:功能接口索引(header_operations.py)
定義文件:module_simple_triggers.py
輸出文件:simple_triggers.txt

對象名稱:觸發器
描述:常規觸發器。啟動後延時,在時間段內檢查滿足條件並執行動作,並可關閉觸發器或再次啟動。
數據結構:觸發器由:檢查時間間隔,計時時長,再次啟動的最小間隔,滿足條件檢查邏輯(功能接口列表),和觸發後執行的邏輯(功能接口列表)所描述。
類別:潛在的全部資源調用
引用資源:功能接口索引(header_operations.py)
定義文件:module_triggers.py
輸出文件:triggers.txt

對象名稱:對話
描述:所有對話的內容,在發生對話的情況下從這裡按條件選出可用對話。
數據結構:對話由:交談角色類索引,啟動對話狀態標記,對話條件檢查邏輯(功能接口列表),對話內容,結束對話狀態標記,和對話結果邏輯(功能接口列表)所描述。
類別:潛在的全部資源調用,隱式外部數據調用(語言包)
引用資源:功能接口索引(header_operations.py),(隱式)觸發器(module_triggers.py)
定義文件:module_dialogs.py  
輸出文件:conversation.txt,quick_strings.txt

對象名稱:自定義功能函數
描述:按一定順序封裝功能接口索引的數據結構,在遊戲國恒中通過其他對象使用功能接口調用,並由引擎將其中的數據內容按功能接口索引查找並執行相應的過程。
數據結構:自定義功能函數由:函數索引,和函數邏輯(功能接口列表)所描述。
類別:潛在的全部資源調用
引用資源:功能接口索引(header_operations.py)
定義文件:module_scripts.py
輸出文件:scripts.txt

對象名稱:動態疊加材質
描述:可以在遊戲中將材質附加到網格上。
數據結構:動態疊加材質由:材質索引,功能標籤,樣本材質文件名稱,寬度,長度,材質位置下限點,材質位置上限點(由此兩點構成的矩形範圍內),和材質邏輯(功能接口列表)所描述。
# TODO:這名字硌應呢要改,另外位置上下限的詳細意思未知。
類別:潛在的全部資源調用,外部資源調用
引用資源:功能接口索引(header_operations.py),材質brf文件。
定義文件:module_tableau_materials.py
輸出文件:tableau_materials.txt

對象名稱:菜單
描述:前面寫字後面有畫讓人看完了從下面的按鈕選一個按的東西。
數據結構:菜單由:菜單索引,功能標籤,菜單文本,背景網格(未應用),菜單啟動邏輯(功能接口列表),和菜單按鈕選項所描述。其中菜單按鈕選項由:按鈕索引,按鈕顯示條件判別邏輯(功能接口列表),按鈕文本,和按下後執行的邏輯(功能接口列表)所描述。
類別:潛在的全部資源調用,隱式外部數據調用(語言包)
引用資源:功能接口索引(header_operations.py)
定義文件:module_game_menus.py
輸出文件:menus.txt

對象名稱:NPC隊伍模板
描述:指定各種組隊形式,以便怪物生成器生成。
數據結構:隊伍模板由:模板索引,模板名稱,功能標識(包含大地圖實體索引),與玩家隊伍相遇時顯示的菜單索引,所屬勢力索引,隊伍性格標籤,和隊伍成員列表所描述。其中隊伍成員由:角色類索引,此類角色在隊伍中的最小人數,最大人數,和成員類型標記所描述。
類別:封裝資源引用,隱式外部數據調用(語言包)
引用資源:菜單(module_game_menus.py),勢力(module_factions.py)
定義文件:module_party_templates.py
輸出文件:party_templates.txt

對象名稱:自定義樣式菜單
描述:可以自定義樣式的菜單。
數據結構:自定義樣式菜單由:菜單索引,功能標籤,背景網格索引,和運行邏輯(功能接口列表)所描述。
類別:潛在的全部資源調用
引用資源:功能接口索引(header_operations.py)
定義文件:module_presentations.py
輸出文件:presentations.txt

對象名稱:NPC生成器
描述:在大地圖上的NPC生成器,生成各種NPC,可以有實體並能包含隊伍成員。比如可見的城鎮是用來當裝飾並顯示裏面有多少NPC的,但並不生成npc。還有不可見的怪物刷新點,生成各種山賊響馬。比較悲劇的硬編碼。
數據結構:生成器由:生成器索引,生成器名稱,功能標記(比如是否顯示),與玩家隊伍相遇時顯示的菜單索引,要生成的隊伍模板索引,所屬勢力索引,隊伍性格標籤,生成隊伍的行為模式標籤,生成隊伍的目標隊伍索引,座標,隊伍成員列表,和方向所描述。
類別:封裝資源引用,隱式外部數據調用(語言包)
引用資源:NPC隊伍模板(module_party_templates.py),菜單(module_game_menus.py),勢力(module_factions.py)
定義文件:module_parties.py
輸出文件:parties.txt

對象名稱:任務模板
描述:用來分配各類任務。
數據結構:任務模板由:模板索引,功能標籤,任務類型,任務描述文本,任務報告列表,和觸發判別條件(功能接口列表)所描述。其中任務報告列表完全沒懂。
#TODO:任務報告列表
類別:潛在的全部資源調用,隱式外部數據調用(語言包)
引用資源:角色類(module_troops.py),物品(module_items.py),功能接口索引(header_operations.py)
定義文件:module_mission_templates.py
輸出文件:mission_templates.txt


數據結構
各個遊戲對象的數據結構已由上列說明,數據結構類型以及相應說明與定義文件頭注釋內。通常針對每個遊戲對象都有一個專屬列表用於存儲所有同類對象。
關於自定義的數據結構,完全可以通過slot將各種基礎數據類型索引整合到某一種遊戲對象內,對於遊戲中通常使用的遊戲實體,即由位置、方向、模型、大小、動作、材質、貼圖、邏輯和相關數據所聯合描述,而這些位置、方向、大小、相關數據實為變量,模型為網格或場景實體,動作、貼圖和邏輯已經有相關接口,並且上述皆為索引形式調用,也就是說全部可以用變量的形式封裝到某個對象中去。甚至可以棄用此對象原本的數據含義以及相關對象,而全部轉用以此對象為基類設計出的新對象。

關於硬編碼
    MB的硬編碼實在讓人頭大。很多硬過程和硬連接完全不給提示,也不告需要知何種資源,創建MBMS空項目還是連蒙帶猜也搞不出來啊。目前所知,MS項目全部清空後生成編譯通過,啟動正常的空遊戲,開始新遊戲後會按菜單1,給人物起名加屬性點介面,頭像生成介面,菜單2的順序強制運行,進入遊戲後攝像機可轉人物可走,角色、物品、隊伍按鈕選單為硬編碼,報告菜單為硬連接,營帳菜單為硬連接並附加未知執行過程,猜測為模型變更,但加入模型後仍然有訪問越界錯誤,可能還訪問了其他的資源。(正常遊戲中在營帳菜單退出時會自動存檔。)另就是任務菜單完全硬編碼,清空項目後不知道他調用了哪些資源,同營帳一樣有訪問越界錯誤。存檔讀檔正常,還未整理功能接口,不知道支持自定義存取功能不(應該支持的吧)。

评分

参与人数 1第纳尔 +20 互助 +1 收起 理由
foxyman + 20 + 1 文章不错,继续努力!

查看全部评分

鲜花鸡蛋

长河渐落晓星沉  在2016-3-24 12:25  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
亚历山大东征  在2014-5-17 22:41  送朵鲜花  并说:太给力了!
逍遥神龙  在2014-5-17 12:23  送朵鲜花  并说:太给力了!

63

主题

1137

回帖

410

积分

骑士

自由骑士
战团ID:JackHertz

Rank: 4Rank: 4

UID
936988
第纳尔
1997
精华
0
互助
6
荣誉
2
贡献
0
魅力
28
注册时间
2012-8-15

战团正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]汉匈决战正版勋章元老骑士勋章霸主正版勋章

鲜花(60) 鸡蛋(0)
发表于 2014-5-11 23:30:59 | 显示全部楼层
這個帖子能告訴我我面臨的問題是哪種類型的問題。
好吧我玩遊戲是有點謝耳朵式的強迫症

16

主题

4096

回帖

1334

积分

骑士长

Rank: 5Rank: 5Rank: 5

UID
1580142
第纳尔
1785
精华
0
互助
16
荣誉
2
贡献
0
魅力
72
注册时间
2013-9-30

骑士美德之英勇勋章[杰出会员活跃勋章]元老骑士勋章霸主正版勋章

鲜花(694) 鸡蛋(30)
发表于 2014-5-17 12:23:01 | 显示全部楼层
感谢楼主,我就可以看我要修改哪些MOD了
强敌当前,不畏不惧,果敢忠义,无愧上帝,忠耿正直,宁死不屈,保护弱者,无违天理!
The strong current, without fear, courageous and worthy of God, loyalty, integrity, protection of the weak, die rather than submit, no breach of justice!

20

主题

769

回帖

302

积分

见习骑士

Rank: 3

UID
1480815
第纳尔
2294
精华
0
互助
11
荣誉
1
贡献
0
魅力
13
注册时间
2013-8-9
鲜花(73) 鸡蛋(0)
发表于 2014-5-17 12:48:57 | 显示全部楼层
本帖最后由 烈焰の寒冰 于 2014-5-17 12:50 编辑

mission_template貌似是战场触发器啊,进入任何场景(包括非战斗的)都会用到它,用以初始化各个数据,出生NPC或部队,实现动作或某些特技等等,反倒是关于任务的部分好像不多

6

主题

1268

回帖

423

积分

骑士

圣地亚哥骑士团[KD]
战团ID:KD_BK_Sephiroth

Rank: 4Rank: 4

UID
881216
第纳尔
2223
精华
0
互助
2
荣誉
3
贡献
0
魅力
63
注册时间
2012-7-9

原版正版勋章战团正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]元老骑士勋章

鲜花(458) 鸡蛋(30)
发表于 2014-5-17 13:01:51 | 显示全部楼层
对很多人很有用
当世界只剩下赤裸与孤独,是否留下愤慨?那是青春的遗迹......                                                                                   

                                                                              
彼时我曾言:“我将永不忘怀!”

63

主题

1137

回帖

410

积分

骑士

自由骑士
战团ID:JackHertz

Rank: 4Rank: 4

UID
936988
第纳尔
1997
精华
0
互助
6
荣誉
2
贡献
0
魅力
28
注册时间
2012-8-15

战团正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]汉匈决战正版勋章元老骑士勋章霸主正版勋章

鲜花(60) 鸡蛋(0)
发表于 2014-5-17 22:39:10 | 显示全部楼层
遲來的愛~看發帖日期和沙發日期就知道了……

好吧我玩遊戲是有點謝耳朵式的強迫症

9

主题

97

回帖

32

积分

扈从

Rank: 2Rank: 2

UID
2585490
第纳尔
209
精华
0
互助
0
荣誉
0
贡献
0
魅力
4
注册时间
2015-8-23
鲜花(12) 鸡蛋(0)
发表于 2015-8-27 20:57:35 来自手机 | 显示全部楼层
不错的贴子,可惜是繁体,有个别字不认识
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-3-28 23:51 , Processed in 0.125890 second(s), 29 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表