And so it begins...
8
game.conf
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
name = artifact_one
|
||||
title = Artifact
|
||||
description = TBD
|
||||
allowed_mapgens = singlenode
|
||||
disallowed_mapgens = v5, v7, flat, fractal, valleys, carpathian, v6
|
||||
min_minetest_version = 5.10
|
||||
disabled_settings = !enable_damage, creative_mode, enable_server
|
||||
author = Signal
|
||||
40
mods/artifact_base/init.lua
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
-- "I'll stop calling it Minetest when it stops being one."
|
||||
minetest = core
|
||||
|
||||
artifact = {
|
||||
debug = true
|
||||
}
|
||||
|
||||
-- For brevity.
|
||||
function include(file)
|
||||
dofile(minetest.get_modpath(minetest.get_current_modname()).."/"..file)
|
||||
end
|
||||
|
||||
function enum(cases)
|
||||
local out = {}
|
||||
local i = 0
|
||||
for _, x in ipairs(cases) do
|
||||
out[x] = i
|
||||
i = i +1
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
||||
say = minetest.chat_send_all
|
||||
|
||||
minetest.register_lbm{
|
||||
name = ":artifact:on_load",
|
||||
nodenames = {"group:call_on_load"},
|
||||
action = function(pos, node)
|
||||
minetest.registered_nodes[node.name].on_load(pos)
|
||||
end
|
||||
}
|
||||
|
||||
if artifact.debug then
|
||||
minetest.register_chatcommand("chest", {
|
||||
func = function(name, args)
|
||||
minetest.registered_chatcommands.giveme.func(name, "chest_with_everything:chest")
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
1
mods/artifact_base/mod.conf
Normal file
|
|
@ -0,0 +1 @@
|
|||
name = artifact_base
|
||||
35
mods/artifact_characters/init.lua
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
|
||||
local ns = artifact
|
||||
|
||||
function ns.apply_key(m)
|
||||
m.object:set_properties {
|
||||
textures = {"artifact_key.png"},
|
||||
visual_size = vector.new(1,1,1) *0.88,
|
||||
eye_height = 1.6
|
||||
}
|
||||
m.eye_height = 1.6
|
||||
end
|
||||
|
||||
function ns.apply_vix(m)
|
||||
m.object:set_properties {
|
||||
textures = {"artifact_vix.png"},
|
||||
visual_size = vector.new(1,1,1) *0.8,
|
||||
eye_height = 1.5
|
||||
}
|
||||
m.eye_height = 1.5
|
||||
end
|
||||
|
||||
function ns.swap_character(m)
|
||||
if m.character == "vix" then
|
||||
m:set_character("key")
|
||||
ns.apply_key(m)
|
||||
else
|
||||
m:set_character("vix")
|
||||
ns.apply_vix(m)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
include "key.lua"
|
||||
include "vix.lua"
|
||||
3
mods/artifact_characters/key.lua
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
|
||||
local ns = artifact
|
||||
|
||||
2
mods/artifact_characters/mod.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
name = artifact_characters
|
||||
depends = artifact_story
|
||||
1
mods/artifact_characters/models/artifact_character.gltf
Normal file
BIN
mods/artifact_characters/textures/artifact_key.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
mods/artifact_characters/textures/artifact_key_splash.png
Normal file
|
After Width: | Height: | Size: 755 KiB |
BIN
mods/artifact_characters/textures/artifact_key_splash_low.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
mods/artifact_characters/textures/artifact_swap.png
Normal file
|
After Width: | Height: | Size: 265 B |
BIN
mods/artifact_characters/textures/artifact_vix.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
mods/artifact_characters/textures/artifact_vix_splash.png
Normal file
|
After Width: | Height: | Size: 753 KiB |
BIN
mods/artifact_characters/textures/artifact_vix_splash_low.png
Normal file
|
After Width: | Height: | Size: 5 KiB |
0
mods/artifact_characters/vix.lua
Normal file
0
mods/artifact_hud/init.lua
Normal file
2
mods/artifact_hud/mod.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
name = artifact_hud
|
||||
depends = artifact_base
|
||||
BIN
mods/artifact_hud/textures/artifact_health_bar.png
Normal file
|
After Width: | Height: | Size: 277 B |
BIN
mods/artifact_hud/textures/artifact_heart.png
Normal file
|
After Width: | Height: | Size: 163 B |
BIN
mods/artifact_hud/textures/artifact_heart_bg.png
Normal file
|
After Width: | Height: | Size: 169 B |
BIN
mods/artifact_hud/textures/artifact_heart_vix.png
Normal file
|
After Width: | Height: | Size: 188 B |
BIN
mods/artifact_hud/textures/artifact_hotbar_bg.png
Normal file
|
After Width: | Height: | Size: 190 B |
BIN
mods/artifact_hud/textures/artifact_hotbar_selected_bg.png
Normal file
|
After Width: | Height: | Size: 171 B |
BIN
mods/artifact_hud/textures/artifact_hud_splashbg.png
Normal file
|
After Width: | Height: | Size: 264 B |
14
mods/artifact_mechanisms/basics.lua
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
|
||||
local function make_lever_entity(pos)
|
||||
|
||||
end
|
||||
|
||||
artifact.register_node("lever", {
|
||||
drawtype = "airlike",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
on_construct = function(pos)
|
||||
|
||||
end
|
||||
})
|
||||
30
mods/artifact_mechanisms/init.lua
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
|
||||
minetest.register_entity(":display", {
|
||||
initial_properties = {
|
||||
pointable = false,
|
||||
static_save = false
|
||||
},
|
||||
on_activate = function(e)
|
||||
e.object:set_armor_groups{immortal = 1}
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
|
||||
minetest.register_entity(":test", {
|
||||
initial_properties = {
|
||||
visual = "sprite",
|
||||
textures = {"blank.png"},
|
||||
use_texture_alpha = true,
|
||||
static_save = false
|
||||
},
|
||||
on_rightclick = function(e, p)
|
||||
artifact.players[p:get_player_name()].interacting_with = e
|
||||
end,
|
||||
on_hover = function() say "!" end,
|
||||
on_interact = function(e, m)
|
||||
|
||||
end
|
||||
})
|
||||
|
||||
include "basics.lua"
|
||||
2
mods/artifact_mechanisms/mod.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
name = artifact_mechanisms
|
||||
depends = artifact_characters
|
||||
235
mods/artifact_player/init.lua
Normal file
|
|
@ -0,0 +1,235 @@
|
|||
|
||||
local ns = artifact
|
||||
ns.players = {}
|
||||
local db = minetest.get_mod_storage()
|
||||
|
||||
Player = setmetatable({
|
||||
new = function(p)
|
||||
local m = setmetatable({
|
||||
object = p
|
||||
}, {__index = Player})
|
||||
|
||||
m.name = p:get_player_name()
|
||||
m.meta = p:get_meta()
|
||||
m.character = m.meta:get("character") or "key"
|
||||
|
||||
m.inv = p:get_inventory()
|
||||
m.inv:set_stack("main", 1, ItemStack("input"))
|
||||
|
||||
-- Generic black sky, since the whole game takes place underground.
|
||||
p:set_sky{
|
||||
type = "basic",
|
||||
base_color = "#000",
|
||||
clouds = false
|
||||
}
|
||||
p:set_sun{visible = false}
|
||||
p:set_moon{visible = false}
|
||||
p:set_stars{visible = false}
|
||||
|
||||
p:set_properties {
|
||||
visual = "mesh",
|
||||
mesh = "artifact_character.gltf",
|
||||
shaded = false
|
||||
}
|
||||
|
||||
if m.character == "vix" then
|
||||
artifact.apply_vix(m)
|
||||
else
|
||||
artifact.apply_key(m)
|
||||
end
|
||||
|
||||
p:hud_set_flags {
|
||||
healthbar = false,
|
||||
breathbar = false,
|
||||
hotbar = artifact.debug,
|
||||
minimap = false,
|
||||
basic_debug = false
|
||||
}
|
||||
|
||||
m:create_hud()
|
||||
|
||||
m:set_hotbar_size(8)
|
||||
|
||||
m.ctl = p:get_player_control()
|
||||
|
||||
return m
|
||||
end,
|
||||
tick = function(m)
|
||||
local time = minetest.get_us_time()
|
||||
local p = m.object
|
||||
local pos = p:get_pos()
|
||||
local dir = p:get_look_dir()
|
||||
m.pos = pos
|
||||
m.pos.y = m.pos.y +m.eye_height
|
||||
|
||||
local pointed_found = nil
|
||||
m.pointed_node = nil
|
||||
for x in minetest.raycast(m.pos, m.pos +(dir *5)) do
|
||||
if x and x.type == "object" then
|
||||
local e = x.ref:get_luaentity()
|
||||
-- Ignore players.
|
||||
if e then
|
||||
local names_match = m.pointed_obj and (m.pointed_obj._name or m.pointed_obj.name) == (e._name or e.name)
|
||||
if m.pointed_obj and not names_match then
|
||||
if m.pointed_obj.on_unhover then
|
||||
m.pointed_obj:on_unhover(m)
|
||||
end
|
||||
if m.pointed_obj.on_interact and m.interaction_marker then
|
||||
m.interaction_marker:remove()
|
||||
m.interaction_marker = nil
|
||||
end
|
||||
end
|
||||
if (m.pointed_obj and not names_match and e.on_hover) or not m.pointed_obj then
|
||||
if e.on_hover then
|
||||
e:on_hover(m)
|
||||
end
|
||||
if e.on_interact then
|
||||
if m.interaction_marker then m.interaction_marker:remove() end
|
||||
m.interaction_marker = minetest.add_entity(e.object:get_pos(), "display")
|
||||
m.interaction_marker:set_properties {
|
||||
visual = "sprite",
|
||||
textures = {"artifact_rmb.png"}
|
||||
}
|
||||
end
|
||||
pointed_found = true
|
||||
m.pointed_obj = e
|
||||
break
|
||||
elseif m.pointed_obj and names_match then
|
||||
pointed_found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
elseif x and x.type == "node" then
|
||||
m.pointed_node = x
|
||||
end
|
||||
end
|
||||
if not pointed_found and m.pointed_obj then
|
||||
if m.pointed_obj.on_unhover then
|
||||
m.pointed_obj:on_unhover(m)
|
||||
end
|
||||
if m.pointed_obj.on_interact and m.interaction_marker then
|
||||
m.interaction_marker:remove()
|
||||
m.interaction_marker = nil
|
||||
end
|
||||
m.pointed_obj = nil
|
||||
end
|
||||
local ctl = m.object:get_player_control()
|
||||
|
||||
if ctl.place and not m.ctl.place and m.pointed_obj and m.pointed_obj.on_interact then
|
||||
if not m.interaction_start then
|
||||
m.interaction_start = time
|
||||
-- m.interaction_marker = minetest.add_entity(m.pointed_obj, "display")
|
||||
-- m.interaction_marker:set_properties {
|
||||
-- visual = "sprite",
|
||||
-- textures = {"rgt_interact_progress_0.png"}
|
||||
-- }
|
||||
else
|
||||
if time -m.interaction_start > 1100000 then
|
||||
m.interaction_marker:remove()
|
||||
m.pointed_obj:on_interact(m)
|
||||
elseif time -m.interaction_start > 1000000 then
|
||||
m.interaction_marker:set_properties {
|
||||
textures = {"artifact_rmb_100.png"}
|
||||
}
|
||||
elseif time -m.interaction_start > 750000 then
|
||||
m.interaction_marker:set_properties {
|
||||
textures = {"artifact_rmb_75.png"}
|
||||
}
|
||||
elseif time -m.interaction_start > 500000 then
|
||||
m.interaction_marker:set_properties {
|
||||
textures = {"artifact_rmb_50.png"}
|
||||
}
|
||||
elseif time -m.interaction_start > 250000 then
|
||||
m.interaction_marker:set_properties {
|
||||
textures = {"artifact_rmb_25.png"}
|
||||
}
|
||||
end
|
||||
end
|
||||
elseif not ctl.place and m.ctl.place and m.interaction_start then
|
||||
m.interacting_with = nil
|
||||
m.interaction_start = nil
|
||||
end
|
||||
|
||||
m.ctl = ctl
|
||||
|
||||
end,
|
||||
set_character = function(m, to)
|
||||
m.character = to
|
||||
m.meta:set_string("character", to)
|
||||
end,
|
||||
-- Initialize the player's primary HUD display based on saved state.
|
||||
create_hud = function(m)
|
||||
-- If called post-init, make sure we delete the previous HUD.
|
||||
-- This is useful when we want to recreate the HUD in response
|
||||
-- to an event, like freeing Vix.
|
||||
if m.hud then
|
||||
for _, x in pairs(m.hud) do
|
||||
if type(x) == "table" then
|
||||
for _, y in pairs(x) do
|
||||
m.object:hud_remove(y)
|
||||
end
|
||||
else
|
||||
m.object:hud_remove(x)
|
||||
end
|
||||
end
|
||||
end
|
||||
m.hud = {
|
||||
key_health = m.object:hud_add {
|
||||
type = "statbar",
|
||||
position = {x=0.5,y=1},
|
||||
offset = {x=-27 *5,y=artifact.debug and -96 or -30},
|
||||
scale = {x=4,y=4},
|
||||
alignment = {x=-1, y=-1},
|
||||
size = {x=27,y=27},
|
||||
text = "artifact_heart_vix.png",
|
||||
text2 = "artifact_heart_bg.png",
|
||||
number = 20
|
||||
}
|
||||
}
|
||||
|
||||
if artifact.debug or artifact.story.states[artifact.story.get_state()] >= artifact.story.states.main then
|
||||
|
||||
end
|
||||
end,
|
||||
set_hotbar_size = function(m, slots)
|
||||
local p = m.object
|
||||
p:hud_set_hotbar_itemcount(slots)
|
||||
local list = ""
|
||||
for i = 0, slots do
|
||||
list = list..":"..(21*i)..",0=artifact_hotbar_bg.png"
|
||||
end
|
||||
p:hud_set_hotbar_image("[combine:"..(21 *slots +1).."x22"..list)
|
||||
p:hud_set_hotbar_selected_image("artifact_hotbar_selected_bg.png")
|
||||
end,
|
||||
}, {
|
||||
__call = function(_, ...)
|
||||
return Player.new(...)
|
||||
end
|
||||
})
|
||||
|
||||
artifact.register_craftitem("input", {
|
||||
inventory_image = "artifact_rmb_100.png",
|
||||
on_drop = function(s, p, pos)
|
||||
local m = artifact.players[p:get_player_name()]
|
||||
if artifact.debug or artifat.story.state > artifact.story.states.pre_vix then
|
||||
artifact.swap_character(m)
|
||||
end
|
||||
return s
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
minetest.register_globalstep(function()
|
||||
for _, m in pairs(artifact.players) do
|
||||
m:tick()
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
minetest.register_on_joinplayer(function(p)
|
||||
artifact.players[p:get_player_name()] = Player(p)
|
||||
if artifact.debug then
|
||||
-- Make sure we don't have to `/grantme` a million times while testing.
|
||||
minetest.registered_chatcommands.grantme.func(p:get_player_name(), "all")
|
||||
end
|
||||
end)
|
||||
2
mods/artifact_player/mod.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
name = artifact_player
|
||||
depends = artifact_characters
|
||||
BIN
mods/artifact_player/textures/artifact_rmb.png
Normal file
|
After Width: | Height: | Size: 143 B |
BIN
mods/artifact_player/textures/artifact_rmb_100.png
Normal file
|
After Width: | Height: | Size: 190 B |
BIN
mods/artifact_player/textures/artifact_rmb_25.png
Normal file
|
After Width: | Height: | Size: 175 B |
BIN
mods/artifact_player/textures/artifact_rmb_50.png
Normal file
|
After Width: | Height: | Size: 191 B |
BIN
mods/artifact_player/textures/artifact_rmb_75.png
Normal file
|
After Width: | Height: | Size: 191 B |
32
mods/artifact_story/init.lua
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
artifact.story = {
|
||||
states = enum { -- We use an enum for this so that we can use relational operators to determine if the current state is before or after a target state.
|
||||
"loading", -- For mapgen
|
||||
"init", -- For the opening cutscene
|
||||
"pre_vix", -- The player doesn't have Vix yet
|
||||
"main", -- The main game state. Progress is managed by checkpoints here.
|
||||
"end", -- The game is over.
|
||||
}
|
||||
}
|
||||
local ns = artifact.story
|
||||
local db = minetest.get_mod_storage()
|
||||
|
||||
local state = db:get_int("state") -- Defaults to zero, i.e. "loading".
|
||||
|
||||
function ns.set_state(to)
|
||||
state = to
|
||||
db:set_int("state", state)
|
||||
end
|
||||
|
||||
function ns.get_state()
|
||||
return state
|
||||
end
|
||||
|
||||
function ns.before_state(target)
|
||||
|
||||
end
|
||||
|
||||
minetest.register_globalstep(function()
|
||||
if state == "init" then
|
||||
|
||||
end
|
||||
end)
|
||||
2
mods/artifact_story/mod.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
name = artifact_story
|
||||
depends = artifact_base
|
||||
156
mods/artifact_world/init.lua
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
|
||||
artifact.registered_nodes = {}
|
||||
|
||||
function artifact.register_node(name, def)
|
||||
artifact.registered_nodes[name] = def
|
||||
def._name = name
|
||||
if not name:find ":" then
|
||||
name = "artifact:"..name
|
||||
end
|
||||
if artifact.debug then
|
||||
if not def.groups then def.groups = {} end
|
||||
def.groups.dig_immediate = 3
|
||||
end
|
||||
minetest.register_node(":"..name, def)
|
||||
if name ~= def._name then
|
||||
minetest.register_alias(def._name, name)
|
||||
end
|
||||
end
|
||||
|
||||
function artifact.register_craftitem(name, def)
|
||||
def._name = name
|
||||
if not name:find ":" then
|
||||
name = "artifact:"..name
|
||||
end
|
||||
minetest.register_craftitem(":"..name, def)
|
||||
if name ~= def._name then
|
||||
minetest.register_alias(def._name, name)
|
||||
end
|
||||
end
|
||||
|
||||
local function rep(tx, size)
|
||||
local out = "[combine:"..(size *16).."x"..(size *16)
|
||||
for x = 0, size -1 do
|
||||
for y = 0, size -1 do
|
||||
out = out..":"..(x *16)..","..(y *16).."="..tx
|
||||
end
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
||||
artifact.register_node("stone", {
|
||||
tiles = {"artifact_stone.png"}
|
||||
})
|
||||
|
||||
artifact.register_node("stone_bricks", {
|
||||
tiles = {"artifact_stone_bricks.png"}
|
||||
})
|
||||
|
||||
artifact.register_node("stone_bricks_small", {
|
||||
tiles = {"artifact_stone_bricks_small.png"}
|
||||
})
|
||||
|
||||
artifact.register_node("stone_tile", {
|
||||
tiles = {"artifact_stone_tile.png"}
|
||||
})
|
||||
|
||||
artifact.register_node("stone_tile_small", {
|
||||
tiles = {"artifact_stone_tile_small.png"}
|
||||
})
|
||||
|
||||
|
||||
artifact.register_node("vines", {
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
-0.5, -0.5, 0.48,
|
||||
0.5, 0.5, 0.48
|
||||
}
|
||||
},
|
||||
walkable = false,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
-0.5, -0.5, 0.5,
|
||||
0.5, 0.5, 0.45
|
||||
}
|
||||
},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
tiles = {"artifact_vines.png"},
|
||||
use_texture_alpha = true
|
||||
})
|
||||
|
||||
artifact.register_node("leaves", {
|
||||
drawtype = "allfaces",
|
||||
-- paramtype = "light",
|
||||
tiles = {"artifact_leaves.png"},
|
||||
use_texture_alpha = true
|
||||
})
|
||||
|
||||
|
||||
artifact.register_node("wood_planks", {
|
||||
tiles = {"artifact_wood_planks.png"}
|
||||
})
|
||||
|
||||
artifact.register_node("ladder_wood", {
|
||||
drawtype = "mesh",
|
||||
mesh = "artifact_ladder.obj",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
tiles = {"artifact_ladder_wood.png"},
|
||||
walkable = false,
|
||||
climbable = true
|
||||
})
|
||||
|
||||
|
||||
|
||||
artifact.register_node("lamp_gold", {
|
||||
drawtype = "mesh",
|
||||
mesh = "artifact_lamp.obj",
|
||||
tiles = {"artifact_lamp_gold.png"},
|
||||
light_source = 8,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true
|
||||
})
|
||||
|
||||
artifact.register_node("lamp_red", {
|
||||
drawtype = "mesh",
|
||||
mesh = "artifact_lamp.obj",
|
||||
tiles = {"artifact_lamp_red.png"},
|
||||
light_source = 6,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true
|
||||
})
|
||||
|
||||
artifact.register_node("lamp_blue", {
|
||||
drawtype = "mesh",
|
||||
mesh = "artifact_lamp.obj",
|
||||
tiles = {"artifact_lamp_blue.png"},
|
||||
light_source = 10,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true
|
||||
})
|
||||
|
||||
|
||||
|
||||
artifact.register_node("light", {
|
||||
tiles = {"artifact_light.png"},
|
||||
paramtype = "light",
|
||||
light_source = 14
|
||||
})
|
||||
|
||||
minetest.override_item("air", {
|
||||
sunlight_propagates = false,
|
||||
light_source = 2
|
||||
})
|
||||
|
||||
minetest.register_mapgen_script(minetest.get_modpath(minetest.get_current_modname()).."/mapgen.lua")
|
||||
|
||||
minetest.register_decoration {
|
||||
deco_type = "simple",
|
||||
decoration = "lamp_gold",
|
||||
place_on = "stone",
|
||||
fill_ratio = 0.02,
|
||||
}
|
||||
21
mods/artifact_world/mapgen.lua
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
|
||||
local vm_data = {}
|
||||
|
||||
local c_stone = minetest.get_content_id("artifact:stone")
|
||||
|
||||
minetest.register_on_generated(function(vm, minp, maxp)
|
||||
local min, max = vm:get_emerged_area()
|
||||
local va = VoxelArea(min, max)
|
||||
|
||||
vm:get_data(vm_data)
|
||||
|
||||
if max.y < 0 then
|
||||
for i in va:iterp(minp, maxp) do
|
||||
vm_data[i] = c_stone
|
||||
end
|
||||
end
|
||||
|
||||
vm:set_data(vm_data)
|
||||
minetest.generate_decorations(vm)
|
||||
vm:calc_lighting()
|
||||
end)
|
||||
2
mods/artifact_world/mod.conf
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
name = artifact_world
|
||||
depends = artifact_base
|
||||
279
mods/artifact_world/models/artifact_ladder.obj
Normal file
|
|
@ -0,0 +1,279 @@
|
|||
# Made in Blockbench 4.12.5
|
||||
mtllib artifact_ladder.mtl
|
||||
|
||||
o cube
|
||||
v -0.375 0.5 0.5
|
||||
v -0.375 0.5 0.375
|
||||
v -0.375 -0.5 0.5
|
||||
v -0.375 -0.5 0.375
|
||||
v -0.5 0.5 0.375
|
||||
v -0.5 0.5 0.5
|
||||
v -0.5 -0.5 0.375
|
||||
v -0.5 -0.5 0.5
|
||||
vt 0 1
|
||||
vt 0.0625 1
|
||||
vt 0.0625 0.5
|
||||
vt 0 0.5
|
||||
vt 0.0625 1
|
||||
vt 0.125 1
|
||||
vt 0.125 0.5
|
||||
vt 0.0625 0.5
|
||||
vt 0.125 1
|
||||
vt 0.1875 1
|
||||
vt 0.1875 0.5
|
||||
vt 0.125 0.5
|
||||
vt 0.1875 1
|
||||
vt 0.25 1
|
||||
vt 0.25 0.5
|
||||
vt 0.1875 0.5
|
||||
vt 0.0625 0.3125
|
||||
vt 0 0.3125
|
||||
vt 0 0.375
|
||||
vt 0.0625 0.375
|
||||
vt 0.125 0.375
|
||||
vt 0.0625 0.375
|
||||
vt 0.0625 0.3125
|
||||
vt 0.125 0.3125
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_310b69c6-0a1e-9e32-b7a6-66ecfa2bc972
|
||||
f 4/4/1 7/3/1 5/2/1 2/1/1
|
||||
f 3/8/2 4/7/2 2/6/2 1/5/2
|
||||
f 8/12/3 3/11/3 1/10/3 6/9/3
|
||||
f 7/16/4 8/15/4 6/14/4 5/13/4
|
||||
f 6/20/5 1/19/5 2/18/5 5/17/5
|
||||
f 7/24/6 4/23/6 3/22/6 8/21/6
|
||||
o cube
|
||||
v 0.5 0.5 0.5
|
||||
v 0.5 0.5 0.375
|
||||
v 0.5 -0.5 0.5
|
||||
v 0.5 -0.5 0.375
|
||||
v 0.375 0.5 0.375
|
||||
v 0.375 0.5 0.5
|
||||
v 0.375 -0.5 0.375
|
||||
v 0.375 -0.5 0.5
|
||||
vt 0.25 1
|
||||
vt 0.3125 1
|
||||
vt 0.3125 0.5
|
||||
vt 0.25 0.5
|
||||
vt 0.3125 1
|
||||
vt 0.375 1
|
||||
vt 0.375 0.5
|
||||
vt 0.3125 0.5
|
||||
vt 0.375 1
|
||||
vt 0.4375 1
|
||||
vt 0.4375 0.5
|
||||
vt 0.375 0.5
|
||||
vt 0.4375 1
|
||||
vt 0.5 1
|
||||
vt 0.5 0.5
|
||||
vt 0.4375 0.5
|
||||
vt 0.1875 0.3125
|
||||
vt 0.125 0.3125
|
||||
vt 0.125 0.375
|
||||
vt 0.1875 0.375
|
||||
vt 0.25 0.375
|
||||
vt 0.1875 0.375
|
||||
vt 0.1875 0.3125
|
||||
vt 0.25 0.3125
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_310b69c6-0a1e-9e32-b7a6-66ecfa2bc972
|
||||
f 12/28/7 15/27/7 13/26/7 10/25/7
|
||||
f 11/32/8 12/31/8 10/30/8 9/29/8
|
||||
f 16/36/9 11/35/9 9/34/9 14/33/9
|
||||
f 15/40/10 16/39/10 14/38/10 13/37/10
|
||||
f 14/44/11 9/43/11 10/42/11 13/41/11
|
||||
f 15/48/12 12/47/12 11/46/12 16/45/12
|
||||
o cube
|
||||
v 0.375 -0.3125 0.5
|
||||
v 0.375 -0.3125 0.4375
|
||||
v 0.375 -0.4375 0.5
|
||||
v 0.375 -0.4375 0.4375
|
||||
v -0.375 -0.3125 0.4375
|
||||
v -0.375 -0.3125 0.5
|
||||
v -0.375 -0.4375 0.4375
|
||||
v -0.375 -0.4375 0.5
|
||||
vt 0 0.5
|
||||
vt 0.375 0.5
|
||||
vt 0.375 0.4375
|
||||
vt 0 0.4375
|
||||
vt 0.25 0.375
|
||||
vt 0.28125 0.375
|
||||
vt 0.28125 0.3125
|
||||
vt 0.25 0.3125
|
||||
vt 0.5 1
|
||||
vt 0.875 1
|
||||
vt 0.875 0.9375
|
||||
vt 0.5 0.9375
|
||||
vt 0.28125 0.375
|
||||
vt 0.3125 0.375
|
||||
vt 0.3125 0.3125
|
||||
vt 0.28125 0.3125
|
||||
vt 0.875 0.59375
|
||||
vt 0.5 0.59375
|
||||
vt 0.5 0.625
|
||||
vt 0.875 0.625
|
||||
vt 0.875 0.59375
|
||||
vt 0.5 0.59375
|
||||
vt 0.5 0.5625
|
||||
vt 0.875 0.5625
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_310b69c6-0a1e-9e32-b7a6-66ecfa2bc972
|
||||
f 20/52/13 23/51/13 21/50/13 18/49/13
|
||||
f 19/56/14 20/55/14 18/54/14 17/53/14
|
||||
f 24/60/15 19/59/15 17/58/15 22/57/15
|
||||
f 23/64/16 24/63/16 22/62/16 21/61/16
|
||||
f 22/68/17 17/67/17 18/66/17 21/65/17
|
||||
f 23/72/18 20/71/18 19/70/18 24/69/18
|
||||
o cube
|
||||
v 0.375 -0.0625 0.5
|
||||
v 0.375 -0.0625 0.4375
|
||||
v 0.375 -0.1875 0.5
|
||||
v 0.375 -0.1875 0.4375
|
||||
v -0.375 -0.0625 0.4375
|
||||
v -0.375 -0.0625 0.5
|
||||
v -0.375 -0.1875 0.4375
|
||||
v -0.375 -0.1875 0.5
|
||||
vt 0.5 0.9375
|
||||
vt 0.875 0.9375
|
||||
vt 0.875 0.875
|
||||
vt 0.5 0.875
|
||||
vt 0.3125 0.375
|
||||
vt 0.34375 0.375
|
||||
vt 0.34375 0.3125
|
||||
vt 0.3125 0.3125
|
||||
vt 0.5 0.875
|
||||
vt 0.875 0.875
|
||||
vt 0.875 0.8125
|
||||
vt 0.5 0.8125
|
||||
vt 0.34375 0.375
|
||||
vt 0.375 0.375
|
||||
vt 0.375 0.3125
|
||||
vt 0.34375 0.3125
|
||||
vt 0.875 0.53125
|
||||
vt 0.5 0.53125
|
||||
vt 0.5 0.5625
|
||||
vt 0.875 0.5625
|
||||
vt 0.875 0.53125
|
||||
vt 0.5 0.53125
|
||||
vt 0.5 0.5
|
||||
vt 0.875 0.5
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_310b69c6-0a1e-9e32-b7a6-66ecfa2bc972
|
||||
f 28/76/19 31/75/19 29/74/19 26/73/19
|
||||
f 27/80/20 28/79/20 26/78/20 25/77/20
|
||||
f 32/84/21 27/83/21 25/82/21 30/81/21
|
||||
f 31/88/22 32/87/22 30/86/22 29/85/22
|
||||
f 30/92/23 25/91/23 26/90/23 29/89/23
|
||||
f 31/96/24 28/95/24 27/94/24 32/93/24
|
||||
o cube
|
||||
v 0.375 0.1875 0.5
|
||||
v 0.375 0.1875 0.4375
|
||||
v 0.375 0.0625 0.5
|
||||
v 0.375 0.0625 0.4375
|
||||
v -0.375 0.1875 0.4375
|
||||
v -0.375 0.1875 0.5
|
||||
v -0.375 0.0625 0.4375
|
||||
v -0.375 0.0625 0.5
|
||||
vt 0.5 0.8125
|
||||
vt 0.875 0.8125
|
||||
vt 0.875 0.75
|
||||
vt 0.5 0.75
|
||||
vt 0.375 0.375
|
||||
vt 0.40625 0.375
|
||||
vt 0.40625 0.3125
|
||||
vt 0.375 0.3125
|
||||
vt 0.5 0.75
|
||||
vt 0.875 0.75
|
||||
vt 0.875 0.6875
|
||||
vt 0.5 0.6875
|
||||
vt 0.40625 0.375
|
||||
vt 0.4375 0.375
|
||||
vt 0.4375 0.3125
|
||||
vt 0.40625 0.3125
|
||||
vt 0.375 0.40625
|
||||
vt 0 0.40625
|
||||
vt 0 0.4375
|
||||
vt 0.375 0.4375
|
||||
vt 0.75 0.4375
|
||||
vt 0.375 0.4375
|
||||
vt 0.375 0.40625
|
||||
vt 0.75 0.40625
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_310b69c6-0a1e-9e32-b7a6-66ecfa2bc972
|
||||
f 36/100/25 39/99/25 37/98/25 34/97/25
|
||||
f 35/104/26 36/103/26 34/102/26 33/101/26
|
||||
f 40/108/27 35/107/27 33/106/27 38/105/27
|
||||
f 39/112/28 40/111/28 38/110/28 37/109/28
|
||||
f 38/116/29 33/115/29 34/114/29 37/113/29
|
||||
f 39/120/30 36/119/30 35/118/30 40/117/30
|
||||
o cube
|
||||
v 0.375 0.4375 0.5
|
||||
v 0.375 0.4375 0.4375
|
||||
v 0.375 0.3125 0.5
|
||||
v 0.375 0.3125 0.4375
|
||||
v -0.375 0.4375 0.4375
|
||||
v -0.375 0.4375 0.5
|
||||
v -0.375 0.3125 0.4375
|
||||
v -0.375 0.3125 0.5
|
||||
vt 0.5 0.6875
|
||||
vt 0.875 0.6875
|
||||
vt 0.875 0.625
|
||||
vt 0.5 0.625
|
||||
vt 0.4375 0.375
|
||||
vt 0.46875 0.375
|
||||
vt 0.46875 0.3125
|
||||
vt 0.4375 0.3125
|
||||
vt 0.375 0.5
|
||||
vt 0.75 0.5
|
||||
vt 0.75 0.4375
|
||||
vt 0.375 0.4375
|
||||
vt 0.46875 0.375
|
||||
vt 0.5 0.375
|
||||
vt 0.5 0.3125
|
||||
vt 0.46875 0.3125
|
||||
vt 0.375 0.375
|
||||
vt 0 0.375
|
||||
vt 0 0.40625
|
||||
vt 0.375 0.40625
|
||||
vt 0.75 0.40625
|
||||
vt 0.375 0.40625
|
||||
vt 0.375 0.375
|
||||
vt 0.75 0.375
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_310b69c6-0a1e-9e32-b7a6-66ecfa2bc972
|
||||
f 44/124/31 47/123/31 45/122/31 42/121/31
|
||||
f 43/128/32 44/127/32 42/126/32 41/125/32
|
||||
f 48/132/33 43/131/33 41/130/33 46/129/33
|
||||
f 47/136/34 48/135/34 46/134/34 45/133/34
|
||||
f 46/140/35 41/139/35 42/138/35 45/137/35
|
||||
f 47/144/36 44/143/36 43/142/36 48/141/36
|
||||
95
mods/artifact_world/models/artifact_lamp.obj
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
# Made in Blockbench 4.12.5
|
||||
mtllib model.mtl
|
||||
|
||||
o cube
|
||||
v 0.125 0.25 0.125
|
||||
v 0.125 0.25 -0.125
|
||||
v 0.125 0 0.125
|
||||
v 0.125 0 -0.125
|
||||
v -0.125 0.25 -0.125
|
||||
v -0.125 0.25 0.125
|
||||
v -0.125 0 -0.125
|
||||
v -0.125 0 0.125
|
||||
vt 0 1
|
||||
vt 0.25 1
|
||||
vt 0.25 0.75
|
||||
vt 0 0.75
|
||||
vt 0 0.75
|
||||
vt 0.25 0.75
|
||||
vt 0.25 0.5
|
||||
vt 0 0.5
|
||||
vt 0.25 1
|
||||
vt 0.5 1
|
||||
vt 0.5 0.75
|
||||
vt 0.25 0.75
|
||||
vt 0.25 0.75
|
||||
vt 0.5 0.75
|
||||
vt 0.5 0.5
|
||||
vt 0.25 0.5
|
||||
vt 0.25 0.25
|
||||
vt 0 0.25
|
||||
vt 0 0.5
|
||||
vt 0.25 0.5
|
||||
vt 0.75 1
|
||||
vt 0.5 1
|
||||
vt 0.5 0.75
|
||||
vt 0.75 0.75
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_949d48e1-8451-d0f6-823c-d3fa01af52b1
|
||||
f 4/4/1 7/3/1 5/2/1 2/1/1
|
||||
f 3/8/2 4/7/2 2/6/2 1/5/2
|
||||
f 8/12/3 3/11/3 1/10/3 6/9/3
|
||||
f 7/16/4 8/15/4 6/14/4 5/13/4
|
||||
f 6/20/5 1/19/5 2/18/5 5/17/5
|
||||
f 7/24/6 4/23/6 3/22/6 8/21/6
|
||||
o cube
|
||||
v 0.0625 0 0.0625
|
||||
v 0.0625 0 -0.0625
|
||||
v 0.0625 -0.5 0.0625
|
||||
v 0.0625 -0.5 -0.0625
|
||||
v -0.0625 0 -0.0625
|
||||
v -0.0625 0 0.0625
|
||||
v -0.0625 -0.5 -0.0625
|
||||
v -0.0625 -0.5 0.0625
|
||||
vt 0.25 0.5
|
||||
vt 0.375 0.5
|
||||
vt 0.375 0
|
||||
vt 0.25 0
|
||||
vt 0.5 0.75
|
||||
vt 0.625 0.75
|
||||
vt 0.625 0.25
|
||||
vt 0.5 0.25
|
||||
vt 0.375 0.5
|
||||
vt 0.5 0.5
|
||||
vt 0.5 0
|
||||
vt 0.375 0
|
||||
vt 0.625 0.75
|
||||
vt 0.75 0.75
|
||||
vt 0.75 0.25
|
||||
vt 0.625 0.25
|
||||
vt 0.125 0.125
|
||||
vt 0 0.125
|
||||
vt 0 0.25
|
||||
vt 0.125 0.25
|
||||
vt 0.875 1
|
||||
vt 0.75 1
|
||||
vt 0.75 0.875
|
||||
vt 0.875 0.875
|
||||
vn 0 0 -1
|
||||
vn 1 0 0
|
||||
vn 0 0 1
|
||||
vn -1 0 0
|
||||
vn 0 1 0
|
||||
vn 0 -1 0
|
||||
usemtl m_949d48e1-8451-d0f6-823c-d3fa01af52b1
|
||||
f 12/28/7 15/27/7 13/26/7 10/25/7
|
||||
f 11/32/8 12/31/8 10/30/8 9/29/8
|
||||
f 16/36/9 11/35/9 9/34/9 14/33/9
|
||||
f 15/40/10 16/39/10 14/38/10 13/37/10
|
||||
f 14/44/11 9/43/11 10/42/11 13/41/11
|
||||
f 15/48/12 12/47/12 11/46/12 16/45/12
|
||||
BIN
mods/artifact_world/textures/artifact_ladder_wood.png
Normal file
|
After Width: | Height: | Size: 276 B |
BIN
mods/artifact_world/textures/artifact_lamp_blue.png
Normal file
|
After Width: | Height: | Size: 266 B |
BIN
mods/artifact_world/textures/artifact_lamp_gold.png
Normal file
|
After Width: | Height: | Size: 301 B |
BIN
mods/artifact_world/textures/artifact_lamp_red.png
Normal file
|
After Width: | Height: | Size: 277 B |
BIN
mods/artifact_world/textures/artifact_leaves.png
Normal file
|
After Width: | Height: | Size: 444 B |
BIN
mods/artifact_world/textures/artifact_light.png
Normal file
|
After Width: | Height: | Size: 154 B |
BIN
mods/artifact_world/textures/artifact_stone.png
Normal file
|
After Width: | Height: | Size: 278 B |
BIN
mods/artifact_world/textures/artifact_stone_bricks.png
Normal file
|
After Width: | Height: | Size: 322 B |
BIN
mods/artifact_world/textures/artifact_stone_bricks_small.png
Normal file
|
After Width: | Height: | Size: 326 B |
BIN
mods/artifact_world/textures/artifact_stone_tile.png
Normal file
|
After Width: | Height: | Size: 299 B |
BIN
mods/artifact_world/textures/artifact_stone_tile_small.png
Normal file
|
After Width: | Height: | Size: 332 B |
BIN
mods/artifact_world/textures/artifact_vines.png
Normal file
|
After Width: | Height: | Size: 418 B |
BIN
mods/artifact_world/textures/artifact_wood_planks.png
Normal file
|
After Width: | Height: | Size: 292 B |
BIN
mods/artifact_world/textures/sunrisebg.png
Normal file
|
After Width: | Height: | Size: 88 B |