*ダンジョン [#ddd28348] **型 [#if14c64f] :tmpdungeon, tmplevel, tmpbranch|dungeon.def で指定した情報が入る構造体 :d_level|ダンジョン番号と階番号が組になった構造体 :s_level|特殊レベルの情報を保持する :branch|分岐情報を保持する~ 分岐は1つのレベルに1つしか置けない **構造体 [#pcddd2c5] :sp_levchn|s_level のリンクリスト :dungeon|tmpdungeon の情報+αが収められる構造体。実際のゲーム中に使われるのはこちら~ 実体は dungeons[] :branches|branch のリンクリスト --end1 がメインダンジョン --end2 がサブダンジョン :dungeon_topology|特殊レベルの d_level または dnum を保持している~ sp_levchn を頭から探さずに必要な s_level を得るためのキャッシュのようなもの **関数 [#h54ba99c] :init_dungeons()|~ +sp_levchn を初期化する +dungeons[] を初期化する +init_level() で特殊レベルの情報を読み込む +place_level() で特殊レベルを配置する +add_level() で sp_levchn に登録する +dungeon_topology を登録する :assign_level()|d_level の中身をコピーするだけ :find_level()|sp_levchn のリストの中から名前の一致するレベルを返す :Is_special()|指定のレベルが sp_levchn にあるレベルなら、その s_level を返す :Is_branchlev()|指定のレベルが brances に登録されている分岐の始点・終点どちらかに該当すれば、その branch を返す :dungeon_branch()|指定の名前のサブダンジョンを end2 に持つ branch を返す **特殊な処理 [#ifd95c38] ***Fort Ludios の分岐 [#m1774523] ダンジョンの構造は init_dungeons() の時点で全て決定されており、プレイ中に動的に変わることはない。例外は Fort Ludios への分岐で、この入口だけは init_dungeons() の時点では決定できない。このため、Fort Ludios への branch の始点(end1)のダンジョン番号は Dungeons of Doom のものではなく n_dgns(ダンジョン総数) が設定されている。ダンジョン番号は後で実際に portal を置くときに修正している。 ***城→死の谷 [#zd35d46b] -fall_through(), level_tele() から find_hell() を呼んで処理している -dodown() は goto_hell() を呼んで処理