[閒聊] 明年的區域拓展計劃
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間14年前 (2011/11/15 10:39)推噓1(1推 0噓 1→)留言2則, 2人參與討論串1/2 (看更多)
明年有一點是確定的,在現行區域裡面會增加子區域。
比方說妖精老家,它可能增加的區域就是OX洞窟或是OX森林
這一類的,底下以OX洞窟說明其做法。
一、界定區域大小後,使用 makearea 指令產生地圖
比方該洞窟我希望是 10x5 的(橫軸10,縱軸5)
> makearea 10x5
1
0123456789012345678
0 x-x-x-x-x-x-x-x-x-x
1 | | | | | | | | | |
2 x-x-x-x-x-x-x-x-x-x
3 | | | | | | | | | |
4 x-x-x-x-x-x-x-x-x-x
5 | | | | | | | | | |
6 x-x-x-x-x-x-x-x-x-x
7 | | | | | | | | | |
8 x-x-x-x-x-x-x-x-x-x
makearea: 區域方陣產生完成, 請按 enter 鍵繼續, 按 q 離開...
請輸入指令(按 q 離開):
經過一番隨機挖洞後得到底下的圖...
1
0123456789012345678
0 x-x-x-x-x x-x-x
1 | | | | |
2 x-x-x x x-x-x x
3 | | | | | |
4 x-x-x x-x-x-x-x-x
5 | | | | | | |
6 x-x x-x x-x-x-x-x
7 | | | | | | |
8 x x-x-x-x-x-x-x
然後透過功能鍵將其轉換為一般數字地圖
請輸入指令(按 q 離開): 5 to 001
001-002-003-004-005 006-007-008
| | | | |
009-010-011 012 013-014-015 016
| | | | | |
017-018-019 020-021-022-023-024-025
| | | | | | |
026-027 028-029 030-031-032-033-034
| | | | | | |
035 036-037-038-039-040-041-042
二、定義區域房間腳本檔
#include "../xxx.h"
inherit OX_ROOM;
void create()
{
::create();
seteuid(getuid(this_object()));
set("long","@@query_long");
SET_EXITS;
SET_OBJECTS;
reset();
}
上述腳本檔只有兩個區域會被替換,就是 SET_EXITS; 跟
SET_OBJECTS。
三、使用 trans 指令搭配腳本檔,依 makearea 產生的地圖來建造房間
> trans /open/area1.pic to /open/tmp/laechan/makearea
資料讀取完成,共讀進了 42 個房間資料。
確定無誤的話請按[enter]開始檔案產生作業,否則請按[q+enter]後離開:
本次作業結束,共產生 42 個檔案。
> ls /open/tmp/laechan/makearea
1 001.c 1 007.c 1 013.c 1 019.c 1 025.c 1 031.c 1 037.c
1 002.c 1 008.c 1 014.c 1 020.c 1 026.c 1 032.c 1 038.c
1 003.c 1 009.c 1 015.c 1 021.c 1 027.c 1 033.c 1 039.c
1 004.c 1 010.c 1 016.c 1 022.c 1 028.c 1 034.c 1 040.c
1 005.c 1 011.c 1 017.c 1 023.c 1 029.c 1 035.c 1 041.c
1 006.c 1 012.c 1 018.c 1 024.c 1 030.c 1 036.c 1 042.c
基本上我會要求在這個目錄放上 area_map 檔,將來就能拿圖做直
接的修改以及區域的 re-build。
四、確認所產生的 42 個房間之房間出口設置
> runmap
地圖產生完成,進行地圖自動縮小中...... 對照區
口─口─口─口─口 口─口─口 | x-x-x-x-x x-x-x
│ │ │ │ │ | | | | | |
口─口─口 口 口─口─口 口 | x-x-x x x-x-x x
│ │ │ │ │ │ | | | | | | |
口─口─口 口─口─口─口─口─口 | x-x-x x-x-x-x-x-x
│ │ │ │ │ │ │ | | | | | | | |
口─口 口─口 口─口─口─口─口 | x-x x-x x-x-x-x-x
│ │ │ │ │ │ │ | | | | | | | |
口 口─口─口─口─口─口─口 | x x-x-x-x-x-x-x
各房間的 SET_EXITS 會被自動替換為如下的東西..
==002.c==
set("exits/south",GR"010"); 001-002-003
set("exits/west",GR"001"); |
set("exits/east",GR"003"); 010
=========
各房間的 SET_OBJECT 也會被替換為怪物的配置程式段。
五、進行 OX_ROOM 房間繼承檔的撰寫。
因為 OX 洞窟的 short、light、exits_color 設定都是
確定的,所以它的格式就類似底下...
inherit ROOM;
void create()
{
::create();
set("short",HIW"OX洞窟"NOR);
set("light",1);
set("exits_color","1;37m");
}
六、進行相關怪物檔撰寫。
比方這個洞窟只會出現兩種怪物,就把這兩種怪物寫好。
而實際上我不會去寫,因為已經有現成的可以直接拿來用
了,就是舊新手村我所寫的怪物(cp過來就好了)。
好了,這樣一個區域就完成了,這麼快!?
這個區域就是解謎用的,妖精老家預定會寫至少兩個這樣的子
區域(另一個當然就是OX森林),比方說絲皮雅拜託小妖精去洞
窟幫忙清除什麼東西之類的啦,或是去森林幫忙採集什麼啦,
等等的。甚至運用水精靈魔法潛入瀑布底下...
> areadata short
deedlit1.c 高等妖精--蒂德莉特(Deedlit)
girl1.c 妖精族少女(elf girl)
master1.c 森之精靈守護者(GuardMaster of Forest)
master2.c 水之精靈守護者(GuardMaster of Water)
oldster1.c 妖精族長老-絲皮雅(Elf Oldster)
> findmob guardmaster of water
ok! 找尋路徑為
起點->northwest->north->west->west->west->north->north->north->west->west->
south->south->west->west->north->north->north->north->east->east->east->
east->east->east
- 小木屋 -
一座小木屋, 在這附近就只有這麼一座, 裡面住著的是掌管妖
精之森大小河流的妖精族老者, 據說他已經在這裡住了超過上
千年的時間.
明顯出口有: west.
(!)Lv200.水之精靈守護者(GuardMaster of Water)
而水之精靈的任務就由 quest 指令來讀取相關的腳本。
各位應該可以輕易地發現,我總共使用了底下的指令..
makearea 依我的要求繪出區域地圖
trans 依我的要求產生區域檔案
runmap 依我的要求秀出區域地圖
areadata 依我的要求顯示目錄資料
quest 依我的要求生成任務資料
findmob 依我的要求找出怪物位置
我這兩三個月就是在忙這些東西,其實還有兩個指令也會用到
,一個是 mirror 指令,一個是 moball 指令。
我已經跟norr說明這些指令的用法(希望他有空時就練習一下)
及用途,我只跟他提,自然是因為我判斷往後可能只有我跟他
會實際投入聖殿的 coding 工作的緣故。
接下來,我會再撰寫幾支工具,然後再構思一個能夠適當地將
這些工具整合起來的開發環境,當這些『工具』都完成後,我
們就不需要再倚靠招收新的 wiz、不需要再靠現有的區域 wiz
、更不需要再從玩家那裡得到區域的相關點子(敘述、怪物等)
,就可以快速撰寫任務、以及任務相關區域。
這是聖殿 2012 年的大致拓展計劃。最壞的情況是可能只有我
有空(norr有他的事情要忙),這時工具的完善度就關係到能不
能「只靠我一個人」就能做我想做的事。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: laechan 來自: 122.117.7.33 (11/15 22:42)
推
11/17 01:05, , 1F
11/17 01:05, 1F
→
11/17 02:50, , 2F
11/17 02:50, 2F
這個是確定有要做的,所以我才會要求 wiz 要保留 area_map
檔在同一個目錄。
string area_maps=explode(read_file(__DIR__+"area_map"),"\n");
for(i=0;i<sizeof(area_maps);i++)
{
tmp=area_maps[i];
s=strlen(tmp);
for(j=2;j<s;j=j+2)
{
if(tmp[j-2..j]=="020") 0XX
{ |
substr(tmp,"020","<o>"); 019-<o>-021
return ({area_maps,i,j-2}); |
} 0XX
}
}
這時就取得了 area_maps 及 i, j
ii=sizeof(area_maps);
if(ii<=13) // 上 3格 下 3格
{
a=0; b=ii; // 地圖很小時就顯示全部
}
else if(i<7)
{
a=0; b=i+6;
if(b>=ii-1) b=ii-1;
}
else
{
a=i-6; b=i+6;
if(b>=ii-1) b=ii-1;
}
jj=strlen(area_maps[0]);
if(jj<=17) // 左 4格 右 4格
{
c=0; d=jj;
.
.
如上做法
}
到這裡就能產生秀圖邊界
msg="";
for(i=a;i<=b;i++)
{
tmp=area_maps[i];
msg+=tmp[c..d];
}
write(msg);
但是基本上不可能邊走路邊秀圖(例如省略房間敘述直接給圖),
也不可能像上面那樣告訴你房間號碼。不可能邊走邊秀圖是因為
它不實用,較實用的做法是像 RO 那樣..
一、給區域全圖
二、再標示你位於區域的哪裡
而我只會告訴你約略的位置,它的好處就是不管圖有多大都能夠
show 的出來,這才是我要做的。
※ 編輯: laechan 來自: 122.117.11.103 (11/17 07:24)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
1
2
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
35
58
120
255