Open dillytin opened 4 years ago
feature-data.h
를 보면 .des 파일에서 불러들일 때 쓰는 제단들 코드가 있음. 예를 들어 샤원 제단은 altar_shining_one
이 아니라 altar_the_shining_one
로 쓰고, overflow 지형에서는 temple_overflow_the_shining_one
를 식별자로 씀.
altar_wyrm temple_overflow_the_great_wyrm
altar_imus temple_overflow_imus_thea
altar_legion temple_overflow_legion_from_beyond
altar_agraphede temple_overflow_agraphede
김치죽에 추가된 신들의 제단은 위의 코드를 .des 파일로 불러들임.
ITEM: potion of curing q:1
처럼 소모품들은 이름 뒤에 q:(수량)을 써줘야됨. 랜덤으로 돌릴거면 ITEM: any potion q:1
NAME: grunt_temple_overflow_kimchi_original_01
DEPTH: D:2-9
TAGS: temple_overflow_3 temple_overflow_wyrm
TAGS: temple_overflow_legion temple_overflow_agraphede
TAGS: no_item_gen
KFEAT: A = altar_wyrm
KFEAT: B = altar_legion
KFEAT: C = altar_agraphede
ITEM: potion of water
ITEM: randbook owner:The Legion disc:summoning numspells:1 slevels:1 / \
ITEM: potion of poison
SHUFFLE: AdB"C` / A'BeC` / A'B"Cf
MAP
xxxxx
xx.B.xx
xxxG.".Gxxx
xxGxx...xxGxx
x...xx.xx...x
xAd.......`Cx
x...x.U.x...x
xGxx...xxGxx
xxx @ xxx
ENDMAP
overflow.des
기준으로 이렇게 만들면 되는건가?
뭐 이건 크래시 나는데 대충 이렇게 만들면 되는거 ㅇㅇ
오우야 난 모양 같은거 의견받으려 하는 거였는데 이렇게 구체적으로 ㄷㄷ
지금 바깥이라 당장 보긴 어려운데 이따 확인해봄. 아셴자리 철창 지형이나 고자그 상점같은 특수 지형을 만들 생각이었음
너머의 군단은 유리벽으로 막힌 방에서 소환마법으로 부르는 소환물들이 그렇지 않은 소환물(춤추는 무기 같은 참회 대상)들과 싸움을 벌이면 어울릴 것 같아요.
ㅗㅜㅑ des 파일 수정하는건 빌드 금방금방 되네 캬 속이 다 시원함
potion of water 처럼 소모품들은 이름 뒤에 q:(수량)을 써줘야되더라. 랜덤으로 돌릴거면 ITEM: any potion q:1
NAME: OT_kimchi_original_01
DEPTH: D:2-9
TAGS: temple_overflow_2 temple_overflow_the_great_wyrm temple_overflow_agraphede
TAGS: transparent
SHUFFLE: bU, _O
KFEAT: _ = altar_wyrm
KFEAT: O = altar_agraphede
TILE: b = dngn_crystal_green
FTILE: ._bOU+ = floor_moss
RTILE: x = wall_brick_brown_vines
KFEAT: p = shallow_water
COLOUR: p = lightgreen
MAP
xxxxxxx
xx.....xx
xx...U...xx
xpppppppppx
xpb._.O.bpx
xp.......px
xx...U...xx
xx.....xx
xxx.xxx
ENDMAP
모든 신의 오버 플로우 제단을 두개씩은 만들어두려고 하니 저도 내일부터 시동 걸겠습니다.
NAME: OT_kimchi_original_01
DEPTH: D:2-9
TAGS: temple_overflow_2 temple_overflow_the_great_wyrm temple_overflow_agraphede
TAGS: no_trap_gen no_item_gen no_monster_gen
SHUFFLE: bU, _O
KFEAT: _ = altar_wyrm
KFEAT: O = altar_agraphede
FTILE: ._bOU+ = floor_moss
RTILE: x = wall_brick_brown_vines
KFEAT: p = shallow_water
KFEAT: P = deep_water
COLOUR: Pp = lightgreen
MAP
xxxxxxxxx
xxPPPPPPPxx
xpppppppppx
xp.._.O..px
xp.......px
xx.......xx
xx.....xx
xxx+xxx
@
ENDMAP
NAME: OT_kimchi_original_02
DEPTH: D:2-9
TAGS: temple_overflow_1 temple_overflow_agraphede
TAGS: no_trap_gen no_item_gen no_monster_gen
KFEAT: O = altar_agraphede
KFEAT: p = shallow_water
KFEAT: P = deep_water
COLOUR: pP = lightgreen
FTILE: .pPot = floor_moss
MARKER: P = lua:fog_machine { cloud_type = "thin mist", pow_min = 10, \
pow_max = 30, delay_min = 10, delay_max = 30, size = 1, walk_dist = 1, \
spread_rate = 1 }
MAP
ccccccc
cccPPPccc
ccPPPPPcc
ccPpppPcc
cPppOppPc
cPpp.ppPc
cPpp.ppPc
ccPp.pPcc
ccp.pcc
cp.pc
p.p
@
ENDMAP
NAME: OT_kimchi_original_03
DEPTH: D:7-14
TAGS: temple_overflow_1 temple_overflow_the_great_wyrm
TAGS: no_trap_gen no_monster_gen no_item_gen no_pool_fixup
KFEAT: O = altar_wyrm
KFEAT: wW = deep_water
KFEAT: lL = lava
RTILE: x = dngn_crystal_green
KFEAT: X = clear_stone_wall
KFEAT: ~ = known shaft trap
MARKER: w = lua:fog_machine { cloud_type = "rain", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 10 }
MARKER: l = lua:fog_machine { cloud_type = "flame", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 10 }
MARKER: ~ = lua:fog_machine { cloud_type = "acidic fog", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 0 }
KPROP: wWlL~ = no_tele_into
KFEAT: d = runed_door
: dgn.delayed_decay(_G, 's', 'orc corpse')
: if you.absdepth() < 10 then
KMONS: D = orc perm_ench:corrosion col:white name:failed dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: C = orc perm_ench:corrosion col:white name:failed dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: A = orc col:white name:alchemist n_suf ; dagger . robe . potion of curing
KITEM: p = potion of degeneration q:1 w:5 / potion of curing q:1
: else
KMONS: D = orc warrior perm_ench:flight col:white name:flying dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: C = orc knight perm_ench:haste perm_ench:might col:white name:enhanced n_suf ;
KMONS: A = ogre col:white name:alchemist n_suf ; potion of heal wounds
KITEM: p = potion of heal wounds q:3
: end
MAP
........................
.xxxxxxxxxxxxxxxxxxxxxx.
.xWWwWwWWWWwWWWWwWWWWWx.
.xWXXXXXXXXXXXXXXXXXXwx.
.xwX...........X....Xwx.
.xWX.D....C...A+.sOpX~x.
.xwX...........X....Xlx.
.xwX...XXXXXXXXXXXXXXLx.
.xWX.s.XlLLLlLLlLLLlLLx.
.xWX...XLxxxxxxxxxxxxxx.
.xwX...XLx..............
.xWXD.DXLx.
.xwX...Xlx.
.xxX.s.Xxx.
..xX...Xx..
..xxx.xxx..
..xdx..
...s...
ENDMAP
NAME: OT_kimchi_original_04
DEPTH: D:2-9
TAGS: temple_overflow_1 temple_overflow_the_great_wyrm
TAGS: no_trap_gen no_item_gen no_monster_gen no_tele_into
KFEAT: A = altar_wyrm
FTILE: . = FLOOR_PEBBLE_GREEN
RTILE: x = dngn_crystal_green
KFEAT: X = clear_stone_wall
KFEAT: M = known shaft trap
KFEAT: wW = deep_water
COLOUR: W = lightgreen
KFEAT: L = lava
FTILE: C = floor_limestone
MARKER: w = lua:fog_machine { cloud_type = "rain", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: W = lua:fog_machine { cloud_type = "noxious fumes", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: L = lua:fog_machine { cloud_type = "flame", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: M = lua:fog_machine { cloud_type = "foul pestilence", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: C = lua:fog_machine { cloud_type = "acidic fog", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MAP
xxxxxxxxxxxxx
xwXWXLXMXCXLx
xXXXXXXXXXXXx
xxX...A...Xxx
xxx.......xxx
xxxx+xxxx
보면 알겠지만 3번 지형이 나름 재밌을거임. 디폼드 오크 스킨 씌운거긴 하지만 베오그 유저들에겐 은근 구미가 당길 것.
function callback.legion_summon(data, triggerable, triggerer, marker, ev)
if not dgn.persist.legion_gg_heard and you.god() == "Legion from beyond" then
dgn.persist.legion_gg_heard = true
dgn.persist.legion_gg_granted = true
elseif not dgn.persist.legion_gg_heard and you.god() ~= "Legion from beyond" then
crawl.god_speaks("Legion from beyond", '"Legion from beyond roars: The Legion needs leader! The Legion needs control!"')
dgn.persist.legion_gg_heard = true
elseif not dgn.persist.legion_gg_granted and you.god() == "Legion from beyond" then
local pos = dgn.find_marker_positions_by_prop("gift", "altar")
dgn.create_monster(pos[1].x, pos[1].y, "generate_awake att:good_neutral crimson imp")
crawl.god_speaks("Legion from beyond", '"Legion from beyond roars: Lead the Legion, our master!"')
dgn.persist.legion_gg_granted = true
end
end
위쪽에 좀의 베스트 프렌드 어쩌구 하는거 가져다가 이런걸 만들어두고
NAME: OT_kimchi_original_05
TAGS: temple_overflow_1 temple_overflow_legion_from_beyond transparent
DEPTH: D:4-9
KFEAT: A = altar_legion
MARKER: A = lua:portal_desc {gift="altar"}
COLOUR: c = red
FTILE: A_ = floor_pebble_red
{{
dgn.persist.legion_gg_granted = false
local los_marker = TriggerableFunction:new {
func="callback.legion_summon",
repeated=true
}
los_marker:add_triggerer(DgnTriggerer:new {
type="player_los"})
lua_marker('A', los_marker)
}}
MAP
ccccc+ccccc
cc..._._...cc
+.....A.....+
cc..._._...cc
ccccc+ccccc
ENDMAP
이런걸 만들어두면 모양이 대충
이렇게 나오는데, 상호작용은 "플레이어가 제단 발견시 메세지 출력" -> "플레이어가 신앙 입교시 메세지 출력 및 트리거 작동"으로 이루어짐.
여기서는 간단하게 빨강임프 하나가 good_natural 상태로 생성되도록 해둠. 약간 악마 소환하는 느낌처럼 ㅇㅇ.
function callback.legion_summon(data, triggerable, triggerer, marker, ev)
if not dgn.persist.legion_gg_heard and you.god() == "Legion from beyond" then
dgn.persist.legion_gg_heard = true
dgn.persist.legion_gg_granted = true
elseif not dgn.persist.legion_gg_heard and you.god() ~= "Legion from beyond" then
crawl.god_speaks("Legion from beyond", '"Legion from beyond roars: The Legion needs leader! The Legion needs control!"')
dgn.persist.legion_gg_heard = true
elseif not dgn.persist.legion_gg_granted and you.god() == "Legion from beyond" then
local pos1 = dgn.find_marker_positions_by_prop("gift", "summon1")
dgn.create_monster(pos1[1].x, pos1[1].y, "generate_awake patrolling att:good_neutral crimson imp")
local pos2 = dgn.find_marker_positions_by_prop("gift", "summon2")
dgn.create_monster(pos2[1].x, pos2[1].y, "generate_awake patrolling att:good_neutral white imp")
local pos3 = dgn.find_marker_positions_by_prop("gift", "summon3")
dgn.create_monster(pos3[1].x, pos3[1].y, "generate_awake patrolling att:good_neutral shadow imp")
local pos4 = dgn.find_marker_positions_by_prop("gift", "summon4")
dgn.create_monster(pos4[1].x, pos4[1].y, "generate_awake patrolling att:good_neutral iron imp")
crawl.god_speaks("Legion from beyond", '"Legion from beyond roars: Lead the Legion, our master!"')
dgn.persist.legion_gg_granted = true
end
end
조금 손을 더 봐서
NAME: OT_kimchi_original_05
TAGS: temple_overflow_1 temple_overflow_legion_from_beyond transparent
TAGS: no_trap_gen no_item_gen no_monster_gen
DEPTH: D:4-9
KFEAT: A = altar_legion
MARKER: 1 = lua:portal_desc {gift="summon1"}
MARKER: 2 = lua:portal_desc {gift="summon2"}
MARKER: 3 = lua:portal_desc {gift="summon3"}
MARKER: 4 = lua:portal_desc {gift="summon4"}
COLOUR: c = red
FTILE: A1234 = floor_pebble_red
{{
dgn.persist.legion_gg_granted = false
local los_marker = TriggerableFunction:new {
func="callback.legion_summon",
repeated=true
}
los_marker:add_triggerer(DgnTriggerer:new {
type="player_los"})
lua_marker('1', los_marker)
lua_marker('2', los_marker)
lua_marker('3', los_marker)
lua_marker('4', los_marker)
}}
MAP
ccccc+ccccc
c.........c
cc...1.2...cc
+.....A.....+
cc...3.4...cc
c.........c
ccccc+ccccc
ENDMAP
응용심화하면 이렇게 4마리 소환도 연출 가능
아 이거 조금만 더 손대는 법 알아내면 용병 고용하는 볼트도 만들 수 있을 거 같은데... 아직 거기까진 어렵더라
이벤트 트리거(MARKER)의 종류는 대충
가장 최신걸로 여기다 올려둠
NAME: OT_kimchi_original_01
DEPTH: D:2-9
TAGS: temple_overflow_2 temple_overflow_the_great_wyrm temple_overflow_agraphede
TAGS: no_trap_gen no_item_gen no_monster_gen
SHUFFLE: bU, _O
KFEAT: _ = altar_wyrm
KFEAT: O = altar_agraphede
FTILE: ._bOU+ = floor_moss
RTILE: x = wall_brick_brown_vines
KFEAT: p = shallow_water
KFEAT: P = deep_water
COLOUR: Pp = lightgreen
MAP
xxxxxxxxx
xxPPPPPPPxx
xpppppppppx
xp.._.O..px
xp.......px
xx.......xx
xx.....xx
xxx+xxx
@
ENDMAP
NAME: OT_kimchi_original_02
DEPTH: D:2-9
TAGS: temple_overflow_1 temple_overflow_agraphede
TAGS: no_trap_gen no_item_gen no_monster_gen
KFEAT: O = altar_agraphede
KFEAT: p = shallow_water
KFEAT: P = deep_water
COLOUR: pP = lightgreen
FTILE: .pPot = floor_moss
MARKER: P = lua:fog_machine { cloud_type = "thin mist", pow_min = 10, \
pow_max = 30, delay_min = 10, delay_max = 30, size = 1, walk_dist = 1, \
spread_rate = 1 }
MAP
ccccccc
cccPPPccc
ccPPPPPcc
ccPpppPcc
cPppOppPc
cPpp.ppPc
cPpp.ppPc
ccPp.pPcc
ccp.pcc
cp.pc
p.p
@
ENDMAP
NAME: OT_kimchi_original_03
DEPTH: D:7-14
TAGS: temple_overflow_1 temple_overflow_the_great_wyrm
TAGS: no_trap_gen no_monster_gen no_item_gen no_pool_fixup transparent
KFEAT: O = altar_wyrm
KFEAT: wW = deep_water
KFEAT: lL = lava
RTILE: x = dngn_crystal_green
COLOUR: x = green
KFEAT: X = clear_stone_wall
FTILE: _ = floor_crystal_squares
KFEAT: ~ = known shaft trap
MARKER: w = lua:fog_machine { cloud_type = "rain", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 10 }
MARKER: l = lua:fog_machine { cloud_type = "flame", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 10 }
MARKER: ~ = lua:fog_machine { cloud_type = "acidic fog", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 0 }
KPROP: wWlL~ = no_tele_into
KFEAT: d = runed_door
: dgn.delayed_decay(_G, 's', 'orc corpse')
: if you.absdepth() < 10 then
KMONS: D = orc perm_ench:corrosion col:white name:failed dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: C = orc perm_ench:corrosion col:white name:failed dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: A = orc col:white name:alchemist n_suf ; dagger . robe . potion of curing
KITEM: p = potion of degeneration q:1 w:5 / potion of curing q:1
: else
KMONS: D = orc warrior perm_ench:flight col:white name:flying dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: C = orc knight perm_ench:haste perm_ench:might col:white name:enhanced n_suf ;
KMONS: A = ogre col:white name:alchemist n_suf ; potion of heal wounds
KITEM: p = potion of heal wounds q:3
: end
MAP
........................
.xxxxxxxxxxxxxxxxxxxxxx.
.xWWwWwWWWWwWWWWwWWWWWx.
.xWXXXXXXXXXXXXXXXXXXwx.
.xwX___________X____Xwx.
.xWX_D____C___A+_sOpX~x.
.xwX___________X____Xlx.
.xwX___XXXXXXXXXXXXXXLx.
.xWX_s_XlLLLlLLlLLLlLLx.
.xWX___XLxxxxxxxxxxxxxx.
.xwX___XLx..............
.xWXD.DXLx.
.xwX___Xlx.
.xxX_s_Xxx.
..xX___Xx..
..xxx_xxx..
..xdx..
...s...
ENDMAP
NAME: OT_kimchi_original_04
DEPTH: D:2-9
TAGS: temple_overflow_1 temple_overflow_the_great_wyrm
TAGS: no_trap_gen no_item_gen no_monster_gen no_tele_into transparent
KFEAT: A = altar_wyrm
RTILE: x = dngn_crystal_green
KFEAT: X = clear_stone_wall
FTILE: "pA = floor_crystal_squares
KFEAT: -~o = shaft trap
KFEAT: ` = known shaft trap
KFEAT: L = lava
FTILE: ` = FLOOR_CRYPT
FTILE: - = FLOOR_LIMESTONE
FTILE: ~ = FLOOR_MARBLE
FTILE: o = FLOOR_GRASS
KITEM: p = any potion q:1
MARKER: ` = lua:fog_machine { cloud_type = "foul pestilence", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: ~ = lua:fog_machine { cloud_type = "salt", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: - = lua:fog_machine { cloud_type = "blessed fire", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: o = lua:fog_machine { cloud_type = "poison gas", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: L = lua:fog_machine { cloud_type = "flame", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MAP
.......
.....xxx...
.........xxxx...
.xxxxxxx..xxxxx.
..xxxxxxxx.xoxxx..
.xxx-----x.xooxxx.
.xx--XXXXx+xXooxx..
..xx-XX""""""XXoxxx.
.xxx~X""""""""Xooxx.
.xx~~X""""""""Xooxx.
.xx~~X"""pA"""XoLxx.
.xx~~X""""""""XLLxx.
.xx~`XX"""""""XLxxx.
.xxx``X""""""XXLxxx.
..xx``Xx+xXXXXLLxx..
.xxx``x.XLLLLLxxx.
..xxx`x.xxxxxxxx..
.xxxxx..xxxxxxx.
...xxxx.........
...xxx.....
.......
ENDMAP
NAME: OT_kimchi_original_05
TAGS: temple_overflow_1 temple_overflow_legion_from_beyond transparent
TAGS: no_trap_gen no_item_gen no_monster_gen
DEPTH: D:4-9
KFEAT: A = altar_legion
MARKER: 1 = lua:portal_desc {gift="summon1"}
MARKER: 2 = lua:portal_desc {gift="summon2"}
MARKER: 3 = lua:portal_desc {gift="summon3"}
MARKER: 4 = lua:portal_desc {gift="summon4"}
COLOUR: c = red
FTILE: A1234 = floor_demonic_red
FTILE: A1234 = floor_demonic_red
FTILE: A1234 = floor_demonic_red
FTILE: A1234 = floor_demonic_red
{{
dgn.persist.legion_gg_granted = false
local los_marker = TriggerableFunction:new {
func="callback.legion_summon",
repeated=true
}
los_marker:add_triggerer(DgnTriggerer:new {
type="player_los"})
lua_marker('1', los_marker)
lua_marker('2', los_marker)
lua_marker('3', los_marker)
lua_marker('4', los_marker)
}}
MAP
ccccc+ccccc
c.........c
cc...1.2...cc
+.....A.....+
cc...3.4...cc
c.........c
ccccc+ccccc
ENDMAP
이거 다 빌드 됐음?
NAME: OT_kimchi_original_05
이거는 Lua 관련해서 뭔가 크래쉬가 남. 내 빌드용 파일이 조금 오래된 거라 그럴 수도 있음. call_legion function failed 어쩌구라고 뜬듯
아 미안 그거 윗부분을 안 올렸구나
NAME: OT_kimchi_original_01
DEPTH: D:2-9
TAGS: temple_overflow_2 temple_overflow_the_great_wyrm temple_overflow_agraphede
TAGS: no_trap_gen no_item_gen no_monster_gen
SHUFFLE: bU, _O
KFEAT: _ = altar_wyrm
KFEAT: O = altar_agraphede
FTILE: ._bOU+ = floor_moss
RTILE: x = wall_brick_brown_vines
KFEAT: p = shallow_water
KFEAT: P = deep_water
COLOUR: Pp = lightgreen
MAP
xxxxxxxxx
xxPPPPPPPxx
xpppppppppx
xp.._.O..px
xp.......px
xx.......xx
xx.....xx
xxx+xxx
@
ENDMAP
01번 지형 편의상 OT를 Overflow Temple이라고 붙여둠. 가장 심플하게 만든 지형. 두 신이 붙어 있는 건 둘 다 녹색을 쓰는 신이라 그런 것도 있지만, 로어적으로 풀어보자면 위대한 뱀은 연금술의 신임. 아그라피드는 독의 신이고. 위대한 뱀이 아그라피드가 내뿜은 독을 모아서 연금술 재료로 가져다 쓰는거라고 보면 될 듯. 또 둘 다 아주 옛날부터 섬김받은 신이고 인격신보다는 관념에 가까운 설정이라는 것도 둘이 겹치는 지점이라서 벽도 이끼로 둘러놓고 두 제단을 같은 지형에 붙여둠.
NAME: OT_kimchi_original_02
DEPTH: D:2-9
TAGS: temple_overflow_1 temple_overflow_agraphede
TAGS: no_trap_gen no_item_gen no_monster_gen
KFEAT: O = altar_agraphede
KFEAT: p = shallow_water
KFEAT: P = deep_water
COLOUR: pP = lightgreen
FTILE: .pPot = floor_moss
MARKER: P = lua:fog_machine { cloud_type = "thin mist", pow_min = 10, \
pow_max = 30, delay_min = 10, delay_max = 30, size = 1, walk_dist = 1, \
spread_rate = 1 }
MAP
ccccccc
cccPPPccc
ccPPPPPcc
ccPpppPcc
cPppOppPc
cPpp.ppPc
cPpp.ppPc
ccPp.pPcc
ccp.pcc
cp.pc
p.p
@
ENDMAP
02번 지형 늪지 + 하수구 느낌나게. 아그라피드의 제단으로 가는 길목에 안개가 집중되는 배치임. 아그라피드가 어두운 굴 속에서부터 섬김받던 신이었다는 설정을 살려서 디자인해봄. 앞이 잘 보이지 않는 희뿌연 시대에서부터 섬겨진 신이니까.
NAME: OT_kimchi_original_03
DEPTH: D:7-14
TAGS: temple_overflow_1 temple_overflow_the_great_wyrm
TAGS: no_trap_gen no_monster_gen no_item_gen no_pool_fixup transparent
KFEAT: O = altar_wyrm
KFEAT: wW = deep_water
KFEAT: lL = lava
RTILE: x = dngn_crystal_green
COLOUR: x = green
KFEAT: X = clear_stone_wall
FTILE: _ = floor_crystal_squares
KFEAT: ~ = known shaft trap
MARKER: w = lua:fog_machine { cloud_type = "rain", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 10 }
MARKER: l = lua:fog_machine { cloud_type = "flame", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 10 }
MARKER: ~ = lua:fog_machine { cloud_type = "acidic fog", \
pow_min = 5, pow_max = 7, delay_min = 10, \
delay_max = 20, size = 1, walk_dist = 0, \
spread_rate = 0 }
KPROP: wWlL~ = no_tele_into
KFEAT: d = runed_door
: dgn.delayed_decay(_G, 's', 'orc corpse')
: if you.absdepth() < 10 then
KMONS: D = orc perm_ench:corrosion col:white name:failed dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: C = orc perm_ench:corrosion col:white name:failed dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: A = orc col:white name:alchemist n_suf ; dagger . robe . potion of curing
KITEM: p = potion of degeneration q:1 w:5 / potion of curing q:1
: else
KMONS: D = orc warrior perm_ench:flight col:white name:flying dbname:deformed_humanoid n_adj n_spe tile:mons_deformed_orc
KMONS: C = orc knight perm_ench:haste perm_ench:might col:white name:enhanced n_suf ;
KMONS: A = ogre col:white name:alchemist n_suf ; potion of heal wounds
KITEM: p = potion of heal wounds q:3
: end
MAP
........................
.xxxxxxxxxxxxxxxxxxxxxx.
.xWWwWwWWWWwWWWWwWWWWWx.
.xWXXXXXXXXXXXXXXXXXXwx.
.xwX___________X____Xwx.
.xWX_D____C___A+_sOpX~x.
.xwX___________X____Xlx.
.xwX___XXXXXXXXXXXXXXLx.
.xWX_s_XlLLLlLLlLLLlLLx.
.xWX___XLxxxxxxxxxxxxxx.
.xwX___XLx..............
.xWXD.DXLx.
.xwX___Xlx.
.xxX_s_Xxx.
..xX___Xx..
..xxx_xxx..
..xdx..
...s...
ENDMAP
전체 구조도
제단 있는 보상방 03번 지형 룬도어 지형임. 7-14층에서 등장하고 10층부터는 내부 몹들이 강화된채로 나옴. 스프리건 베이커 지형 코드랑 루 제단 지형 코드를 써서 일반 몹에 이름 띄우기 + 영구 버프를 걸어주도록 구현함. 시고투비 위즈랩에서만 나오는 변이된 오크 타일도 비슷하게 가져다 써둠. 안쪽에서 연금술사 오크/오우거가 오크들 데려다가 실험하는 연구소 컨셉인데, 약물 증류에 필요한 물하고 용암을 끝에 산성구름 + 구덩이에서 합성하는 느낌을 내려고 했음. 10층 전까진 실패한 오크들이 나오지만 10층부터 제대로 된 강화-오크가 나옴. 베오그로 교화해서 데려가도 영구 버프는 지속되는 점이 소소한 메리트가 될 거임. 베오그 신도가 아녀도 포션 주워보러 들어갈 정도는 됨. 굴착질해도 안쪽에 투명벽은 안 뚫릴거임.
NAME: OT_kimchi_original_04
DEPTH: D:2-9
TAGS: temple_overflow_1 temple_overflow_the_great_wyrm
TAGS: no_trap_gen no_item_gen no_monster_gen no_tele_into transparent
KFEAT: A = altar_wyrm
RTILE: x = dngn_crystal_green
KFEAT: X = clear_stone_wall
FTILE: "pA = floor_crystal_squares
KFEAT: -~o = shaft trap
KFEAT: ` = known shaft trap
KFEAT: L = lava
FTILE: ` = FLOOR_CRYPT
FTILE: - = FLOOR_LIMESTONE
FTILE: ~ = FLOOR_MARBLE
FTILE: o = FLOOR_GRASS
KITEM: p = any potion q:1
MARKER: ` = lua:fog_machine { cloud_type = "foul pestilence", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: ~ = lua:fog_machine { cloud_type = "salt", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: - = lua:fog_machine { cloud_type = "blessed fire", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: o = lua:fog_machine { cloud_type = "poison gas", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MARKER: L = lua:fog_machine { cloud_type = "flame", pow_min = 10, \
pow_max = 10, delay = 10, size = 1, \
walk_dist = 0, excl_rad = 0 }
MAP
.......
.....xxx...
.........xxxx...
.xxxxxxx..xxxxx.
..xxxxxxxx.xoxxx..
.xxx-----x.xooxxx.
.xx--XXXXx+xXooxx..
..xx-XX""""""XXoxxx.
.xxx~X""""""""Xooxx.
.xx~~X""""""""Xooxx.
.xx~~X"""pA"""XoLxx.
.xx~~X""""""""XLLxx.
.xx~`XX"""""""XLxxx.
.xxx``X""""""XXLxxx.
..xx``Xx+xXXXXLLxx..
.xxx``x.xLLLLLxxx.
..xxx`x.xxxxxxxx..
.xxxxx..xxxxxxx.
...xxxx.........
...xxx.....
.......
ENDMAP
04번 지형 위대한 뱀 모티브가 우로보로스(자기 꼬리를 무는 뱀)이라길래 위대한 뱀의 권능셋 순서대로 구름 색깔 맞춰서 배치해둠. 니그레도(검은색, 부패구름)->알베도(흰색, 소금구름)->치트리니타스(노란색, 신성구름)->비리디타스(녹색, 독구름)->루베도(붉은색, 화염구름). 위의 03번 지형과 마찬가지로 내부 바닥 타일을 고르는 데 신경 좀 썼음.
function callback.legion_summon(data, triggerable, triggerer, marker, ev)
if not dgn.persist.legion_gg_heard and you.god() == "Legion from beyond" then
dgn.persist.legion_gg_heard = true
dgn.persist.legion_gg_granted = true
elseif not dgn.persist.legion_gg_heard and you.god() ~= "Legion from beyond" then
crawl.god_speaks("Legion from beyond", '"Legion from beyond roars: The Legion needs leader! The Legion needs control!"')
dgn.persist.legion_gg_heard = true
elseif not dgn.persist.legion_gg_granted and you.god() == "Legion from beyond" then
local pos1 = dgn.find_marker_positions_by_prop("gift", "summon1")
dgn.create_monster(pos1[1].x, pos1[1].y, "generate_awake patrolling att:good_neutral crimson imp")
local pos2 = dgn.find_marker_positions_by_prop("gift", "summon2")
dgn.create_monster(pos2[1].x, pos2[1].y, "generate_awake patrolling att:good_neutral white imp")
local pos3 = dgn.find_marker_positions_by_prop("gift", "summon3")
dgn.create_monster(pos3[1].x, pos3[1].y, "generate_awake patrolling att:good_neutral shadow imp")
local pos4 = dgn.find_marker_positions_by_prop("gift", "summon4")
dgn.create_monster(pos4[1].x, pos4[1].y, "generate_awake patrolling att:good_neutral iron imp")
crawl.god_speaks("Legion from beyond", '"Legion from beyond roars: Lead the Legion, our master!"')
dgn.persist.legion_gg_granted = true
end
end
@ukdong90 빌드에러 나는게 이거 안 들어가서 그럴거임. function callback.xom_greatest_gift(data, triggerable, triggerer, marker, ev)
아래쪽에 넣어주면 될거 ㅇㅇ 이게 들어가줘야 밑에 05번 지형이 제대로 작동함.
NAME: OT_kimchi_original_05
TAGS: temple_overflow_1 temple_overflow_legion_from_beyond transparent
TAGS: no_trap_gen no_item_gen no_monster_gen
DEPTH: D:4-9
KFEAT: A = altar_legion
MARKER: 1 = lua:portal_desc {gift="summon1"}
MARKER: 2 = lua:portal_desc {gift="summon2"}
MARKER: 3 = lua:portal_desc {gift="summon3"}
MARKER: 4 = lua:portal_desc {gift="summon4"}
COLOUR: c = red
FTILE: A1234 = floor_demonic_red
FTILE: A1234 = floor_demonic_red
FTILE: A1234 = floor_demonic_red
FTILE: A1234 = floor_demonic_red
{{
dgn.persist.legion_gg_granted = false
local los_marker = TriggerableFunction:new {
func="callback.legion_summon",
repeated=true
}
los_marker:add_triggerer(DgnTriggerer:new {
type="player_los"})
lua_marker('1', los_marker)
lua_marker('2', los_marker)
lua_marker('3', los_marker)
lua_marker('4', los_marker)
}}
MAP
ccccc+ccccc
c.........c
cc...1.2...cc
+.....A.....+
cc...3.4...cc
c.........c
ccccc+ccccc
ENDMAP
05번 지형 너머의 군단 제단이 있고, 제단으로부터 7913방향에 판데모니엄 악마 타일이 배치되어 있음. 이때 방 안에서 몹이 스폰될 경우 악마 타일의 위치에서 몹이 스폰됨. 플레이어의 LOS 안에 악마 타일의 위치가 들어오면 너머의 군단이 울부지저따! 가 트리거되게 만들었음.
만약 플레이어가 이 제단으로 너머의 군단을 믿게 되면, 마찬가지로 너머의 군단이 울부지저따! 나오면서 악마 타일의 위치에 임프 4종류가 엘리빌론 쿼카처럼 우호적+중립적인 상태로 스폰됨. 4-9층에서 등장하니까 이 지형 믿고 개길 수준은 안 됨.
일단 3번 지형이 너무 지나치게 큰 거 같음. 꺾인 부분을 없애서 작게 만드는 게 좋을듯. 그리고 4번 지형도 저층에서 나오는 제단 지형임을 감안하면 그 크기가 너무 큼
모든 지형은 크기가 작으면 작을수록 좋아서 더 줄여주셨으면 좋겠음. 내가 그냥 줄이고 싶긴 한데 코드가 섞여있다보니까 내가 뚝딱 하기가 좀 그렇네. 4번 같은 경우는 그냥 네모낳게만 해도 다양한 구름들만 유지 되면 컨셉에 전혀 문제 없을 거같음.
그런 의미에서 1,2,5 번은 그냥 적용해도 손색없을 정도로 완벽함. 특히 우호적 악마 소환되는 부분
아 저거 4번은 엘리빌론+이레데 지형이랑 비슷하거나 조금 더 작은 크기임. 사실 몇몇 지형들 빼면 되게 큼직큼직함ㅋㅋㅋㅋ 루 제단 지형이 그렇게 클 줄은 몰랐음. 비슷한 시점에 등장하는 다른 제단들 비교해도 크기 걱정은 안 해도 될 거라고 봄.
3번은 룬도어 지형이라 저 정도 사이즈 나온건데, 다른 룬도어 지형보다 좀 더 작은 크기여도 상관없나? 맵 생성될때 저렇게 꺾어줘야 꺾인 공간까지 인식해서 맵 만들어주느라 일부러 꺾어준거거든.
아 의도가 뭐 따로 있으면 굳이 고칠 건 없지
/* "Oddball grids" are handled in _vault_grid. */
static dungeon_feature_type _glyph_to_feat(int glyph)
{
return (glyph == 'x') ? DNGN_ROCK_WALL :
(glyph == 'X') ? DNGN_PERMAROCK_WALL :
(glyph == 'c') ? DNGN_STONE_WALL :
(glyph == 'v') ? DNGN_METAL_WALL :
(glyph == 'b') ? DNGN_CRYSTAL_WALL :
(glyph == 'm') ? DNGN_CLEAR_ROCK_WALL :
(glyph == 'n') ? DNGN_CLEAR_STONE_WALL :
(glyph == 'o') ? DNGN_CLEAR_PERMAROCK_WALL :
(glyph == 't') ? DNGN_TREE :
(glyph == '+') ? DNGN_CLOSED_DOOR :
(glyph == '=') ? DNGN_RUNED_CLEAR_DOOR :
(glyph == 'w') ? DNGN_DEEP_WATER :
(glyph == 'W') ? DNGN_SHALLOW_WATER :
(glyph == 'l') ? DNGN_LAVA :
(glyph == '>') ? DNGN_ESCAPE_HATCH_DOWN :
(glyph == '<') ? DNGN_ESCAPE_HATCH_UP :
(glyph == '}') ? DNGN_STONE_STAIRS_DOWN_I :
(glyph == '{') ? DNGN_STONE_STAIRS_UP_I :
(glyph == ')') ? DNGN_STONE_STAIRS_DOWN_II :
(glyph == '(') ? DNGN_STONE_STAIRS_UP_II :
(glyph == ']') ? DNGN_STONE_STAIRS_DOWN_III :
(glyph == '[') ? DNGN_STONE_STAIRS_UP_III :
(glyph == 'A') ? DNGN_STONE_ARCH :
(glyph == 'C') ? _pick_an_altar() : // f(x) elsewhere {dlb}
(glyph == 'I') ? DNGN_ORCISH_IDOL :
(glyph == 'G') ? DNGN_GRANITE_STATUE :
(glyph == 'T') ? DNGN_FOUNTAIN_BLUE :
(glyph == 'U') ? DNGN_FOUNTAIN_SPARKLING :
(glyph == 'V') ? DNGN_DRY_FOUNTAIN :
(glyph == 'Y') ? DNGN_FOUNTAIN_BLOOD :
(glyph == '\0')? DNGN_ROCK_WALL
: DNGN_FLOOR; // includes everything else
}
따로 지정해주는게 아니라면 기본적으로 .des 파일에서 맵 만들 때 쓴 문자는 위와 같이 지정됨
NAME: UK_legion_uncontrolledarena
TAGS: temple_overflow_1 temple_overflow_legion_from_beyond
TAGS: no_trap_gen no_item_gen no_monster_gen no_tele_into
DEPTH: D:3-9
KFEAT: _ = altar_legion
KFEAT: S = malign_gateway
TILE: c = wall_stone_dark
MONS: tentacled monstrosity att:neutral, tentacled monstrosity
MAP
xxxxx
xxcccxx
xxccSccxx
xxcc122ccxx
xcc.....ccx
xc111.222cx
xcnnnnnnncx
xc..._...cx
xcccc@ccccx
xxxxx+xxxxx
ENDMAP
일단 이렇게 만들어두긴 했는데 지금 안에 있는 몬스터들이 '플레이어가 문을 열어서 시야 내에 들어왔을 때부터' 서로 싸우게 만들고 싶음. 혹시 방법 아심?
물론 몬스터 종류는 저것보다 더 다양하게
이건 초안이었는데 너무 크다고 생각해서 아주 간소화 시킨 게 위에 것
아 내 능지로는 도저히 안되겠네 파켈라스 지형 보면서 어떻게든 해볼라 그랬는데 알아보질 못하겠다 며칠있다가 안되면 그냥 아예 딴걸로 바꿈
@ukdong90
function callback.legion_arena(data, triggerable, triggerer, marker, ev)
if not dgn.persist.legion_gg_notice and you.god() == "Legion from beyond" then
dgn.persist.legion_gg_notice = true
elseif not dgn.persist.legion_gg_notice and you.god() ~= "Legion from beyond" then
local pos_mon1 = dgn.find_marker_positions_by_prop("frenzy", "ugly")
dgn.create_monster(pos_mon1[1].x, pos_mon1[1].y, "generate_awake att:neutral ugly thing perm_ench:insane")
local pos_mon2 = dgn.find_marker_positions_by_prop("frenzy", "dragon")
dgn.create_monster(pos_mon2[1].x, pos_mon2[1].y, "generate_awake att:neutral fire dragon perm_ench:insane")
local pos_mon3 = dgn.find_marker_positions_by_prop("frenzy", "golem")
dgn.create_monster(pos_mon3[1].x, pos_mon3[1].y, "generate_awake att:neutral iron golem perm_ench:insane")
crawl.god_speaks("Legion from beyond", 'You see the unbridled forces left uncontrolled.')
dgn.persist.legion_gg_notice = true
end
end
NAME: UK_legion_uncontrolledarena
TAGS: temple_overflow_1 temple_overflow_legion_from_beyond
TAGS: no_trap_gen no_item_gen no_monster_gen no_tele_into transparent
DEPTH: D:3-9
KFEAT: _ = altar_legion
KFEAT: S = malign_gateway
TILE: x = dngn_transparent_wall_darkgray
TILE: c = wall_stone_dark
FTILE: "`G- = floor_hall
MARKER: " = lua:portal_desc {frenzy="ugly"}
MARKER: ` = lua:portal_desc {frenzy="dragon"}
MARKER: G = lua:portal_desc {frenzy="golem"}
{{
dgn.persist.legion_gg_notice = false
local los_marker = TriggerableFunction:new {
func="callback.legion_arena",
repeated=true
}
los_marker:add_triggerer(DgnTriggerer:new {
type="player_los"})
lua_marker('"', los_marker)
lua_marker('`', los_marker)
lua_marker('G', los_marker)
}}
MAP
xxxxx
xxcccxx
xxccSccxx
xxcc-"-ccxx
xcc-----ccx
xc`-----Gcx
xcnnnnnnncx
xc..._...cx
xcccc@ccccx
xxxxx+xxxxx
ENDMAP
만약을 대비해서 주변 벽(x)을 굴착 안되는 벽으로 바꿔둠.
https://github.com/kimjoy2002/crawl/issues/469 이것저것 만져보니까 뭔가 가능할거 같아짐
제가 기억하기론 모든 신에게는 각각의 고유 지형이 최소한 하나씩은 있습니다.
너머의 군단, 아그라피드, 위대한 뱀에 대한 고정 지형도 추가하려는데 혹시 아이디어 있으신 분은 의견 부탁드림다