kimjoy2002 / crawl

Dungeon Crawl: Stone Soup Korean fork repository
Other
29 stars 20 forks source link

새로 추가된 신들의 고유 제단 지형 아이디어 받습니다 #455

Open dillytin opened 4 years ago

dillytin commented 4 years ago

제가 기억하기론 모든 신에게는 각각의 고유 지형이 최소한 하나씩은 있습니다.

너머의 군단, 아그라피드, 위대한 뱀에 대한 고정 지형도 추가하려는데 혹시 아이디어 있으신 분은 의견 부탁드림다

youredoomed commented 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

youredoomed commented 4 years ago
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 기준으로 이렇게 만들면 되는건가?

뭐 이건 크래시 나는데 대충 이렇게 만들면 되는거 ㅇㅇ

dillytin commented 4 years ago

오우야 난 모양 같은거 의견받으려 하는 거였는데 이렇게 구체적으로 ㄷㄷ

지금 바깥이라 당장 보긴 어려운데 이따 확인해봄. 아셴자리 철창 지형이나 고자그 상점같은 특수 지형을 만들 생각이었음

Fruitybite commented 4 years ago

너머의 군단은 유리벽으로 막힌 방에서 소환마법으로 부르는 소환물들이 그렇지 않은 소환물(춤추는 무기 같은 참회 대상)들과 싸움을 벌이면 어울릴 것 같아요.

youredoomed commented 4 years ago

ㅗㅜㅑ des 파일 수정하는건 빌드 금방금방 되네 캬 속이 다 시원함 potion of water 처럼 소모품들은 이름 뒤에 q:(수량)을 써줘야되더라. 랜덤으로 돌릴거면 ITEM: any potion q:1

youredoomed commented 4 years ago

image

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
dillytin commented 4 years ago

모든 신의 오버 플로우 제단을 두개씩은 만들어두려고 하니 저도 내일부터 시동 걸겠습니다.

youredoomed commented 4 years ago
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번 지형이 나름 재밌을거임. 디폼드 오크 스킨 씌운거긴 하지만 베오그 유저들에겐 은근 구미가 당길 것.

youredoomed commented 4 years ago
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

이런걸 만들어두면 모양이 대충

image 이렇게 나오는데, 상호작용은 "플레이어가 제단 발견시 메세지 출력" -> "플레이어가 신앙 입교시 메세지 출력 및 트리거 작동"으로 이루어짐.

image 여기서는 간단하게 빨강임프 하나가 good_natural 상태로 생성되도록 해둠. 약간 악마 소환하는 느낌처럼 ㅇㅇ.

youredoomed commented 4 years ago
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

image 응용심화하면 이렇게 4마리 소환도 연출 가능

youredoomed commented 4 years ago

아 이거 조금만 더 손대는 법 알아내면 용병 고용하는 볼트도 만들 수 있을 거 같은데... 아직 거기까진 어렵더라

이벤트 트리거(MARKER)의 종류는 대충

youredoomed commented 4 years ago

가장 최신걸로 여기다 올려둠

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
dillytin commented 4 years ago

이거 다 빌드 됐음?

NAME: OT_kimchi_original_05

이거는 Lua 관련해서 뭔가 크래쉬가 남. 내 빌드용 파일이 조금 오래된 거라 그럴 수도 있음. call_legion function failed 어쩌구라고 뜬듯

youredoomed commented 4 years ago

아 미안 그거 윗부분을 안 올렸구나

youredoomed commented 4 years ago
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

OT0101 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

OT0201 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

OT0301 전체 구조도

OT0302 제단 있는 보상방 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

OT0401 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

OT0501 05번 지형 너머의 군단 제단이 있고, 제단으로부터 7913방향에 판데모니엄 악마 타일이 배치되어 있음. 이때 방 안에서 몹이 스폰될 경우 악마 타일의 위치에서 몹이 스폰됨. 플레이어의 LOS 안에 악마 타일의 위치가 들어오면 너머의 군단이 울부지저따! 가 트리거되게 만들었음.

OT0502 만약 플레이어가 이 제단으로 너머의 군단을 믿게 되면, 마찬가지로 너머의 군단이 울부지저따! 나오면서 악마 타일의 위치에 임프 4종류가 엘리빌론 쿼카처럼 우호적+중립적인 상태로 스폰됨. 4-9층에서 등장하니까 이 지형 믿고 개길 수준은 안 됨.

dillytin commented 4 years ago

일단 3번 지형이 너무 지나치게 큰 거 같음. 꺾인 부분을 없애서 작게 만드는 게 좋을듯. 그리고 4번 지형도 저층에서 나오는 제단 지형임을 감안하면 그 크기가 너무 큼

모든 지형은 크기가 작으면 작을수록 좋아서 더 줄여주셨으면 좋겠음. 내가 그냥 줄이고 싶긴 한데 코드가 섞여있다보니까 내가 뚝딱 하기가 좀 그렇네. 4번 같은 경우는 그냥 네모낳게만 해도 다양한 구름들만 유지 되면 컨셉에 전혀 문제 없을 거같음.

그런 의미에서 1,2,5 번은 그냥 적용해도 손색없을 정도로 완벽함. 특히 우호적 악마 소환되는 부분

youredoomed commented 4 years ago

아 저거 4번은 엘리빌론+이레데 지형이랑 비슷하거나 조금 더 작은 크기임. 사실 몇몇 지형들 빼면 되게 큼직큼직함ㅋㅋㅋㅋ 루 제단 지형이 그렇게 클 줄은 몰랐음. 비슷한 시점에 등장하는 다른 제단들 비교해도 크기 걱정은 안 해도 될 거라고 봄.

3번은 룬도어 지형이라 저 정도 사이즈 나온건데, 다른 룬도어 지형보다 좀 더 작은 크기여도 상관없나? 맵 생성될때 저렇게 꺾어줘야 꺾인 공간까지 인식해서 맵 만들어주느라 일부러 꺾어준거거든.

dillytin commented 4 years ago

아 의도가 뭐 따로 있으면 굳이 고칠 건 없지

youredoomed commented 3 years ago
/* "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 파일에서 맵 만들 때 쓴 문자는 위와 같이 지정됨

dillytin commented 3 years ago

캡처

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

일단 이렇게 만들어두긴 했는데 지금 안에 있는 몬스터들이 '플레이어가 문을 열어서 시야 내에 들어왔을 때부터' 서로 싸우게 만들고 싶음. 혹시 방법 아심?

물론 몬스터 종류는 저것보다 더 다양하게

dillytin commented 3 years ago

캡처2

이건 초안이었는데 너무 크다고 생각해서 아주 간소화 시킨 게 위에 것

dillytin commented 3 years ago

아 내 능지로는 도저히 안되겠네 파켈라스 지형 보면서 어떻게든 해볼라 그랬는데 알아보질 못하겠다 며칠있다가 안되면 그냥 아예 딴걸로 바꿈

youredoomed commented 3 years ago

@ukdong90

image

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)을 굴착 안되는 벽으로 바꿔둠.

youredoomed commented 3 years ago

https://github.com/kimjoy2002/crawl/issues/469 이것저것 만져보니까 뭔가 가능할거 같아짐