local modname = minetest.get_current_modname() local S = minetest.get_translator(modname) local contributors_file_name = minetest.get_modpath(modname) .. "/CONTRUBUTOR_LIST.txt" local file = io.open(contributors_file_name) local contributors = {} if not file then minetest.log("error", "[" .. modname .. "] Can't read contributors from " .. contributors_file_name) else local contributor_list = file:read("*a") file:close() for contributor in contributor_list:gmatch("[^\r\n]+") do table.insert(contributors, contributor) end end mcl_credits = { players = {}, description = S("A faithful Open Source clone of Minecraft"), people = { {S("Creator of MineClone"), 0x0A9400, { "davedevils", }}, {S("Creator of MineClone 2"), 0xFBF837, { "Wuzzy", }}, {S("Creators of MineClone 5"), 0x52FF00, contributors }, {S("Special thanks"), 0x00E9FF, { "celeron55 for creating Minetest", "Jordach for the jukebox music compilation from Big Freaking Dig", "The workaholics who spent way too much time writing for the Minecraft Wiki. It's an invaluable resource for creating this game", "Notch and Jeb for being the major forces behind Minecraft", }} } } local function add_hud_element(def, huds, y) def.alignment = {x = 0, y = 0} def.position = {x = 0.5, y = 0} def.offset = {x = 0, y = y} def.z_index = 1001 local id = huds.player:hud_add(def) table.insert(huds.ids, id) huds.moving[id] = y return id end function mcl_credits.show(player) local name = player:get_player_name() if mcl_credits.players[name] then return end local huds = { new = true, -- workaround for MT < 5.5 (sending hud_add and hud_remove in the same tick) player = player, moving = {}, ids = { player:hud_add({ hud_elem_type = "image", text = "credits_bg.png", position = {x = 0, y = 0}, alignment = {x = 1, y = 1}, scale = {x = -100, y = -100}, z_index = 1000, }), player:hud_add({ hud_elem_type = "text", text = S("Sneak to skip"), position = {x = 1, y = 1}, alignment = {x = -1, y = -1}, offset = {x = -5, y = -5}, z_index = 1001, number = 0xFFFFFF, }), player:hud_add({ hud_elem_type = "text", text = " "..S("Jump to speed up (additionally sprint)"), position = {x = 0, y = 1}, alignment = {x = 1, y = -1}, offset = {x = -5, y = -5}, z_index = 1002, number = 0xFFFFFF, }), }, } add_hud_element({ hud_elem_type = "image", text = "mineclone2_logo.png", scale = {x = 1, y = 1}, }, huds, 300, 0) add_hud_element({ hud_elem_type = "text", text = mcl_credits.description, number = 0x757575, scale = {x = 5, y = 5}, }, huds, 350, 0) local y = 450 for _, group in ipairs(mcl_credits.people) do add_hud_element({ hud_elem_type = "text", text = group[1], number = group[2], scale = {x = 3, y = 3}, }, huds, y, 0) y = y + 25 for _, name in ipairs(group[3]) do y = y + 25 add_hud_element({ hud_elem_type = "text", text = name, number = 0xFFFFFF, scale = {x = 1, y = 1}, }, huds, y, 0) end y = y + 200 end huds.icon = add_hud_element({ hud_elem_type = "image", text = "mineclone2_icon.png", scale = {x = 1, y = 1}, }, huds, y) mcl_credits.players[name] = huds end function mcl_credits.hide(player) local name = player:get_player_name() local huds = mcl_credits.players[name] if huds then for _, id in pairs(huds.ids) do player:hud_remove(id) end end mcl_credits.players[name] = nil end minetest.register_on_leaveplayer(function(player) mcl_credits.players[player:get_player_name()] = nil end) minetest.register_globalstep(function(dtime) for _, huds in pairs(mcl_credits.players) do local player = huds.player local control = player:get_player_control() if not huds.new and control.sneak then mcl_credits.hide(player) else local moving = {} local any for id, y in pairs(huds.moving) do y = y - 1 if control.jump then y = y - 2 if control.aux1 then y = y - 5 end end if y > -100 then if id == huds.icon then y = math.max(400, y) else any = true end player:hud_change(id, "offset", {x = 0, y = y}) moving[id] = y end end if not any then mcl_credits.hide(player) end huds.moving = moving end huds.new = false end end)