File: v_shapes.lua

package info (click to toggle)
crawl 2%3A0.33.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 95,264 kB
  • sloc: cpp: 358,145; ansic: 27,203; javascript: 9,491; python: 8,359; perl: 3,327; java: 2,667; xml: 2,191; makefile: 1,830; sh: 611; objc: 250; cs: 15; sed: 9; lisp: 3
file content (94 lines) | stat: -rw-r--r-- 3,429 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
------------------------------------------------------------------------------
-- v_shapes.lua:
--
-- Creates shapes for layout paint arrays

hypervaults.shapes = {}
hypervaults.floors = {}

function floor_vault_paint_callback(room,options)
  return {
    { type = "floor", corner1 = { x = 0, y = 0 }, corner2 = { x = room.size.x - 1, y = room.size.y - 1 }, empty = true },
  }
end

-- This version of floor vault adds a staircase somewhere randomly in the middle
-- In other layouts we don't want to mess with the stairs but in V this will ensure the stairs are in a room, not the corridors
function hypervaults.shapes.floor_vault(room, options, gen)

  local paint = floor_vault_paint_callback(room,options,gen)
  if options.stair_chance ~= nil and crawl.x_chance_in_y(options.stair_chance,100) then

    -- Place the stair
    table.insert(paint, { shape = "plot", feature = "stone_stairs_down_i",
      x = crawl.random2(math.floor(room.size.x/2)) + crawl.div_rand_round(room.size.x,4),
      y = crawl.random2(math.floor(room.size.y/2)) + crawl.div_rand_round(room.size.y,4),
    })

  end
  return paint

end

function junction_vault_paint_callback(room,options,gen)

  local floor = floor_vault_paint_callback(room,options,gen)

  local max_corridor = math.min(gen.max_corridor, math.floor(math.min(room.size.x,room.size.y)/2))
  local corridor_width = crawl.random_range(gen.min_corridor,max_corridor)

  -- Use cunning grid wrapping to generate all kinds of corners and intersections
  local corner1 = { x = crawl.random_range(corridor_width,room.size.x), y = crawl.random_range(corridor_width,room.size.y) }
  table.insert(floor, { type = "space", corner1 = corner1, corner2 = { x = corner1.x + room.size.x - 1 - corridor_width, y = corner1.y + room.size.y - 1 - corridor_width }, wrap = true })
  return floor
end

function bubble_vault_paint_callback(room,options,gen)
  return {
    { type = "floor", corner1 = { x = 0, y = 0 }, corner2 = { x = room.size.x - 1, y = room.size.y - 1 }, shape = "ellipse" },
  }
end

function hypervaults.floors.full_size_room()
  local gxm, gym = dgn.max_bounds()

  local paint = {
    { type = "floor", corner1 = { x = 1, y = 1 }, corner2 = { x = gxm-2, y = gym-2 } }
  }
  return paint
end

function hypervaults.floors.three_quarters_size_room()
  local gxm, gym = dgn.max_bounds()

  local paint = {
    { type = "floor", corner1 = { x = 11, y = 11 }, corner2 = { x = gxm-12, y = gym-12 } }
  }
  return paint
end

function hypervaults.floors.small_central_room()
  local gxm, gym = dgn.max_bounds()
  -- Put a single empty room somewhere roughly central. All rooms will be built off from each other following this
  local x1 = crawl.random_range(30, gxm-70)
  local y1 = crawl.random_range(30, gym-70)

  local paint = {
    { type = "floor", corner1 = { x = x1, y = y1 }, corner2 = { x = x1 + crawl.random_range(4,6), y = y1 + crawl.random_range(4,6) } }
  }
  return paint
end

function hypervaults.floors.small_edge_room()
  local gxm, gym = dgn.max_bounds()
  local normal = hypervaults.normals[crawl.random2(4)+1]
  local size = { x = crawl.random_range(4,8), y = crawl.random_range(4,8) }

  local x1 = math.floor((normal.x + 1)*(gxm - 10 - size.x)/2 + 5)
  local y1 = math.floor((normal.y + 1)*(gym - 10 - size.y)/2 + 5)

  local paint = {
    { type = "floor", corner1 = { x = x1, y = y1 }, corner2 = { x = x1 + size.x - 1, y = y1 + size.y - 1 } }
  }
  return paint
end