-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathinit.lua
More file actions
214 lines (179 loc) · 8.62 KB
/
init.lua
File metadata and controls
214 lines (179 loc) · 8.62 KB
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
-- CHESS MOD
-- ======================================
-- chess/init.lua
-- ======================================
-- Registers the basic chess stuff
--
-- Contents:
--
-- [regis] Spawn Block
-- [craft] Spawn Block
-- [regis] board_black
-- [regis] board_white
-- ======================================
dofile(minetest.get_modpath("chess").."/pieces.lua")
dofile(minetest.get_modpath("chess").."/rules.lua")
dofile(minetest.get_modpath("chess").."/ownership.lua")
local function is_owner(pos, name)
local owner = minetest.env:get_meta(pos):get_string("owner")
if owner == "" or owner == name then
return true
end
return false
end
local letters = {"a", "b", "c", "d", "e", "f", "g", "h"}
local size = 9 --total width(10) including the border coordinate 0,0
local innerSize = 8 --inner width(8) including the coordinate 1,1
-- Register the spawn block
minetest.register_node("chess:spawn",{
description = "Chess Board",
tile_images = {"chess_border_spawn.png", "chess_board_black.png", "chess_board_black.png^chess_border_side.png"},
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=1,not_in_creative_inventory=1},
can_dig = function(pos, placer)
local player = placer:get_player_name()
return is_owner(pos, player)
end,
after_dig_node = function(pos, node, digger)
local size = 9
local p = {x=pos.x+1, y=pos.y, z=pos.z+1}
local n = minetest.env:get_node(p)
if n.name == "chess:board_black" then
for i = size, 0, -1 do
for ii = size, 0, -1 do
--remove board
local p = {x=pos.x+i, y=pos.y, z=pos.z+ii}
minetest.env:remove_node(p)
--remove pieces ontop
local p = {x=pos.x+i, y=pos.y+1, z=pos.z+ii}
minetest.env:remove_node(p)
end
end
end
end,
on_punch = function(pos)
--reset the pieces
end,
after_place_node = function(pos, placer)
--assign ownership to placer
local player = placer:get_player_name()
local meta = minetest.env:get_meta(pos)
meta:set_string("infotext", "[Chess] " .. player .. " is owner")
meta:set_string("owner", player)
--place chess board
for i = size, 0, -1 do
for ii = size, 0, -1 do
for iii = 1, 0, -1 do
if (i+ii+iii~=0) then
local p = {x=pos.x+i, y=pos.y+iii, z=pos.z+ii}
local n = minetest.env:get_node(p)
if(n.name ~= "air") then
minetest.chat_send_all("[Chess] cannot place chess board")
return
end
end
end
end
end
minetest.chat_send_all("[Chess] " .. player .. " placed chessboard, hit king to select color")
for i = size, 0, -1 do
for ii = size, 0, -1 do
--place chessboard
local p = {x=pos.x+i, y=pos.y, z=pos.z+ii}
local p_top = {x=pos.x+i, y=pos.y+1, z=pos.z+ii}
if (ii == 0) or (ii == size) or (i ==0) or (i == size) then --if border
if (ii == 0) and (i < size) and (i > 0) then --black letters
minetest.env:add_node(p, {name="chess:border_" .. letters[i]})
end
if (ii == size) and (i < size) and (i > 0) then --white letters
minetest.env:add_node(p, {name="chess:border_" .. letters[i], param2=2})
end
if (i == 0) and (ii < size) and (ii > 0) then --black numbers
minetest.env:add_node(p, {name="chess:border_" .. ii})
end
if (i == size) and (ii < size) and (ii > 0) then --white numbers
minetest.env:add_node(p, {name="chess:border_" .. ii, param2=2})
end
if (i == 0 or i == size) and (ii == 0 or ii == size) and i+ii ~= 0 then --corners
minetest.env:add_node(p, {name="chess:border"})
end
else--if inside border
if (((ii+i)/2) == math.floor((ii+i)/2)) then
minetest.env:add_node(p, {name="chess:board_black"})
else
minetest.env:add_node(p, {name="chess:board_white"})
end
end
--place pieces
local face = 2
if (ii == 2) and (i>0) and (i<size) then --pawns
minetest.env:add_node(p_top, {name="chess:pawn_white", param2 = face})
end
if (ii == 1) then --behind pawns
if (i == 1 or i == 8) then minetest.env:add_node(p_top, {name="chess:rook_white", param2 = face}) end
if (i == 2 or i == 7) then minetest.env:add_node(p_top, {name="chess:knight_white", param2 = face}) end
if (i == 3 or i == 6) then minetest.env:add_node(p_top, {name="chess:bishop_white", param2 = face}) end
if (i == 4) then minetest.env:add_node(p_top, {name="chess:queen_white", param2 = face}) end
if (i == 5) then minetest.env:add_node(p_top, {name="chess:king_white", param2 = face}) end
end
--black pieces
face = 0
if (ii == 7) and (i>0) and (i<size) then --pawns
minetest.env:add_node(p_top, {name="chess:pawn_black", param2 = face})
end
if (ii == 8) then --behind pawns
if (i == 1 or i == 8) then minetest.env:add_node(p_top, {name="chess:rook_black", param2 = face}) end
if (i == 2 or i == 7) then minetest.env:add_node(p_top, {name="chess:knight_black", param2 = face}) end
if (i == 3 or i == 6) then minetest.env:add_node(p_top, {name="chess:bishop_black", param2 = face}) end
if (i == 4) then minetest.env:add_node(p_top, {name="chess:queen_black", param2 = face}) end
if (i == 5) then minetest.env:add_node(p_top, {name="chess:king_black", param2 = face}) end
end
end
end
end,
})
-- Add crafting for the spawn block
minetest.register_craft({
output="chess:spawn",
recipe = {
{'default:wood','default:tree','default:wood'},
{'default:tree','default:wood','default:tree'},
{'default:wood','default:tree','default:wood'},
}
})
--Register the Board Blocks: white
minetest.register_node("chess:board_white",{
description = "White Chess Board Piece",
tile_images = {"chess_board_white.png"},
inventory_image = "chess_board_white.png",
groups = {indestructable, not_in_creative_inventory=1},
})
--Register the Board Blocks: black
minetest.register_node("chess:board_black",{
description = "Black Chess Board Piece",
tile_images = {"chess_board_black.png"},
inventory_image = "chess_board_black.png",
groups = {indestructable, not_in_creative_inventory=1},
})
minetest.register_node("chess:border",{
description = "Black Chess Board Piece",
tile_images = {"chess_board_black.png", "chess_board_black.png", "chess_board_black.png^chess_border_side.png"},
inventory_image = "chess_board_black.png",
groups = {indestructable, not_in_creative_inventory=1},
})
for iii = innerSize, 1, -1 do
minetest.register_node("chess:border_" .. letters[iii],{
description = "White Chess Board Piece",
tile_images = {"chess_board_black.png^chess_border_" .. letters[iii] .. ".png", "chess_board_black.png", "chess_board_black.png^chess_border_side.png"},
inventory_image = "chess_board_white.png",
paramtype2 = "facedir",
groups = {indestructable, not_in_creative_inventory=1},
})
minetest.register_node("chess:border_" .. iii,{
description = "White Chess Board Piece",
tile_images = {"chess_board_black.png^chess_border_" .. iii .. ".png", "chess_board_black.png", "chess_board_black.png^chess_border_side.png"},
inventory_image = "chess_board_white.png",
paramtype2 = "facedir",
groups = {indestructable, not_in_creative_inventory=1},
})
end
print("[Chess] Loaded!")