6. 由任務產生空間 (Generating Space From Mission)
為了使用一個形狀語法(Shape grammar)從已生成的任務中產生出一個空間,我們對形狀語法(Shape grammar)做了些微的調整。任務的中止符(Terminal symbols)必須得在形狀語法中作為建造指令(Building instruction)發揮作用。要實現任務中止符在形狀語法中的機能,形狀語法的每個規則都得與任務語法的中止符有所關連。Figure 5所示為實作的雛形。一個生產出來的任務(從Figure 4的規則產生),圖形語法首先會搜索任務中的下一個符號,並基於它們的關聯權重(Relative weight)隨機尋找可實現此符號的規則;然後從可適用此規則的各種可能擺設位置中再根據關聯適用度(Relative fitness,該位置可能有其他更合適的選擇)隨機選擇其一。這個演算法為每個生成的元素儲存了一個任務符號的參照(Reference),這讓演算法可以依據任務支配與空間的緊密連結。此機制避免演算法把鑰匙、道具隨機擺放而非如任務規範地安排在測驗、門鎖其後。圖形語法更針對一些影響規則選擇的動態參數做了擴充。這些參數用以建立程序化難度控制或不同註記(Register)的切換。例如,這個語法在每次選擇規則時有更高的機率選擇難度更高的阻礙,並將生成許多陷阱的註記替換為存在與多怪物的註記。
在應證此研究的測試程式裡,規則可以擁有對應的指令。這些指令在規則被使用的前後皆可執行。它們使動態的規則權重與程序化難度在眾多要素中能更好地發揮作用。
有關於圖形語法的額外補充是,此圖形語法受到了LSystem於城市塑形中自動鋪設道路交叉的設計(請見Section 3)啟發。為了保證空間成長時確實地與先前的空間重新連結,這麼一個步驟被加入演算法。該步驟執行於一個規則已擺放於空間之後,它會尋找兩個鄰近、又適當對齊的連結,並將兩個空間連結起。為了避免任務出現短迴路,例如意外地將最終房間與入口附近的房間連結起,所有在生成結構中開放的連結都必須在特定的規則執行前或後封閉。這些指令對應到用以實現此類邏輯的規則。
一旦完整的任務落成,形狀語法便退為正常的實作,且會繼續疊代直到所有非中止符被一套設計予完善此空間的規則(或說增長出額外分支)取代為中止符時。Figure 8列出一些對形狀語法依此方法而產生的規則。Figure 9展示出一些在關卡建立所用的疊代,這些基於文上Figure 5所示關卡的第一部分。理論上要產生一個地圖可以容納複數個任務應該不會很難。任務可以透過生產器在多個任務中選擇下個被配置的工作進行融合。第二個任務也可以在第一個任務預備後,被當作建造指令使用。