From 86aabfa9b2296c74f0af7a19b27de540c77c0072 Mon Sep 17 00:00:00 2001 From: Ciaran Gultnieks Date: Thu, 3 Apr 2014 08:32:23 +0100 Subject: [PATCH] Initial commit --- README.md | 212 +++++ commands.lua | 225 ++++++ depends.txt | 1 + init.lua | 778 ++++++++++++++++++ models/people_character.blend | Bin 0 -> 517076 bytes models/people_character.x | 1392 +++++++++++++++++++++++++++++++++ textures/people_character.png | Bin 0 -> 3223 bytes tracking.lua | 115 +++ 8 files changed, 2723 insertions(+) create mode 100644 README.md create mode 100644 commands.lua create mode 100644 depends.txt create mode 100644 init.lua create mode 100644 models/people_character.blend create mode 100644 models/people_character.x create mode 100644 textures/people_character.png create mode 100644 tracking.lua diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ff708f --- /dev/null +++ b/README.md @@ -0,0 +1,212 @@ +#People Mod + +NOTE: Requires my fork of minetest to work properly. In particular: +* https://github.com/CiaranG/minetest/commit/740f057253495633db4cc53c905d4ea4ff1167c8 +* https://github.com/CiaranG/minetest/commit/7b7e8bd4b924b74271eb26b30fa681eb8bd780c5 +* https://github.com/CiaranG/minetest/commit/8eb489ece109e56c4d0fa01a0b956f7fa9f0ab56 +* https://github.com/CiaranG/minetest/commit/8772041b43b78c86bc32e5682391286bca498848 +* https://github.com/CiaranG/minetest/commit/f5b73e0baabbfe68bc6a9a52c5221930e4306ed2 + +This mod provides 'people' (non player characters) that are programmable +in-game. Each NPC's Lua code runs inside a secure sandbox for that NPC only. + +Author: Ciaran Gultnieks +License: LGPL + +Includes lua sandbox setup code from mesecons by Jeija (also LGPL), and inspiration +from the npcf mod, and (obviously!) the mesecons lua controller design. + +The character model is a modified version of the default player model from +the default minetest game. + +##Requirements + +Optionally, you might want these mods: +* areas (my fork of it) - https://github.com/CiaranG/areas - for footpath + navigation support +* moddebug - https://gitlab.com/CiaranG/moddebug - for debug logging + +##Usage + +To create a lua_npc, issue this command: + + /people create Bob + +This places a person called "Bob" at your current location. + +Then, right-click the npc at any time to program it. For now, until I think +of a better name, we'll refer to the code you enter here as "the person's +lua code"! + +##The Person's Lua Code + +This code, as entered in the right-click dialog for a person you own, is +really an event handler. It runs in a sandbox, and when called will always +have a variable called 'event'. This is a table, and the "type" field +determines the type of event that caused the call. + +Here is a very simple example: + + if event.type == "program" then + action = {"follow", name="Ciaran"} + end + +When you enter this and hit the Program button, the person will start following +the player called Ciaran and keep doing that until they log off. Because the +code does nothing in response to an "act" event, at that point they will go into +a permanent wait (sleep) state. + +##Events + +The following event types are received by the person's lua code: + +###act + +This happens when the person has no current action (see the Actions section). +The handler should select a new action, by setting the 'action' variable. If +it fails to do so, the person will do an automatic wait. + +###tell + +This happens when a player (who must be the owner, current) sends a message +to the person. It can be used to respond to commands. + +###step + +This happens only when the "step" action is running. It's called every server +step, with event.dtime containing the time since the last step. The handler +should update the speed and yaw variables, or set a new action. + +###program + +This happens when the lua code has been edited. + +###activate + +This happens when the entity is activated (either it's brand new, or is in +a block that was unloaded but is now loaded). It is called with event.dtime_s +containing the time since it was last active. + +###punched + +This happens when a player punches the entity. The name of the offending player +is sent as event.puncher. + +##Actions + +Actions are the basic building blocks of object behaviour. A person always +has a current action which they are completing, the execution of which is +handled by the mod. The job of the lua programming within the person is to +sit at a higher level of 'conciousness' and select the appropriate actions. + +The person's lua code receives an "act" event when it should select an +action - usually when the current action completes. It can also set/replace +the current action in response to any other event. Setting the action is +a simple case of setting the 'action' variable within the lua code. + +An action is defined by a table, where the first element [1] is the ID of +the action, and additional named fields contain parameters. For a simple +example, {"go", pos={5,0,5}} is an action to move the person to the given +position. + +###Action types + +The following actions are currently defined: + +####go, with pos={x,y,z} +Walks to the given position. + +####go, with name="string" +Walks to a named position - names are looked up using the areas module, if +present This converts to go, pos={x,y,z}, with name retained for reference. + +####follow, with name="playername" +Follows the given player indefinitely (or at least until they log off). + +####face, with pos={x,y,z} +Standing still, face towards the given position. + +####wait, with time +Do nothing for that many seconds. This may allow the entity to be deactivated +and unloaded, in which case it will be reactivated at the appropriate time. +Short waits may not result in deactivation. + +####step +Allow's the person's lua code to handle on_step itself. It will receive +"step" events (with dtime) and should reset the action when it no longer +needs to do this. It can update 'speed' and 'yaw' and these will be used. + +###Nesting + +Any action can have a "prevaction" field, which should be a valid action +itself. It will be set when the action has completed. This can be used to nest +actions. + +The actions themselves may make use of this functionality. For example, the +follow action is implemented by repeatedly selecting positions near the target +player, and then replacing it self with a "go" action with the original follow +nested as a "prevaction" within it. Thus, when the "go" completes, the follow +resumes once more. + +##Chat Commands + +People can be managed and controlled via chat commands. + +The following commands are available: + +###/people help +Lists all the available commands. + +###/people create +Creates a new person, at your current location. + +###/people delete +Deletes a person. + +###/people where +Tells you the current location of a person. + +###/people summon +Moves the person to your current location. + +###/people setowner +Changes the owner of the person. + +###/people tell +The person receives a "tell" event with the given message. + +###/people status +Lists all people in the word, and their current status (active/inactive). + +###/people skin +Sets the skin of the person to the named one. (Or use 'list' to get a +list of available skins, which come from the skins mod). + +##Autonomy and Activation + +People are 'autonomous' - i.e. they will continue to act even when no player +is nearby. Indeed, they will continue to act even when no player at all is +logged in to the server. + +However, they are designed to be able to not remain active unless necessary. +This is mostly done by use of the "wait" action. + +If you set a person to wait for 5 minutes, then assuming no player or other +active entity is nearby, the block the person is in (and surrounding blocks) +will be unloaded, and the person will cease to exist as far as the minetest +engine is concerned. However, after 5 minutes, this mod will reactivate it +by reloading the block. + +###Force Loading +This mod uses the 'force loading' API (which is silly and inadequate) to +reactive sleeping entities when it needs to. It does not require the +persistence over server restarts of force-loaded blocks, and while it ought +to clean up any force loading it does almost immediately, that cannot happen +if there is a server crash or other unclean shutdown at the wrong moment. +You could mitigate this by always removing the force loaded blocks file from +the world directory on startup. + +Ultimately it won't use this 'feature' at all. + + + diff --git a/commands.lua b/commands.lua new file mode 100644 index 0000000..35c145c --- /dev/null +++ b/commands.lua @@ -0,0 +1,225 @@ + +local dbg +if moddebug then dbg=moddebug.dbg("people") else dbg={v1=function() end,v2=function() end,v3=function() end} end + +--- Get a person name from the next argument +-- @return The person name, the actual person, and the rest of the +-- arguments. If the person name is nil, the arguments are invalid. +-- If person is nil, the name is valid, but it's not a person that +-- actually exists. +local get_person = function(args) + + if not args then return nil, nil, nil end + + person_name, args = string.match(args, "^([^ ]+)(.*)") + + if person_name and not people.is_valid_name(person_name) then + return nil, nil, nil + end + local person + if person_name then person = people.people[person_name] end + if args then args = string.sub(args, 2) end + return person_name, person, args + +end + +local subcmd = {} + +subcmd.help = function(playername, args) + msg = "Subcommands:" + for c, _ in pairs(subcmd) do + msg = msg.." "..c + end + return msg, true +end + +subcmd.create = function(playername, args) + local person, person_name + person_name, person, args = get_person(args) + if not person_name then + return "Name needs to be specified", false + end + if person then + return "Person "..person_name.." already exists", false + end + local player = minetest.get_player_by_name(playername) + if not player then + return "people create can only be used by a player", false + end + local pos = player:getpos() + local obj = minetest.add_entity(pos, "people:person") + if not obj then + return "Failed to add_entity", false + end + local ent = obj:get_luaentity() + ent.name = person_name + ent.owner = playername + people.people_add(ent) + return "Created "..person_name, true +end + +subcmd.delete = function(playername, args) + local person, person_name + person_name, person, args = get_person(args) + if not person then + return "Specify a valid person" + end + local ent = people.people[person_name].entity + if not ent then + return "Can't delete when inactive", false + end + ent.object:remove() + people.people[person_name] = nil + return "Deleted "..person_name, true +end + +subcmd.summon = function(playername, args) + local person, person_name + person_name, person, args = get_person(args) + if not person then + return "Specify a valid person" + end + local player = minetest.get_player_by_name(playername) + if not player then + return "people summon can only be used by a player", false + end + local pos = player:getpos() + local ent = people.people[person_name].entity + if not ent then + return "Can't summon because not active", false + end + ent.object:setpos(pos) + return "Summoned "..person_name, true +end + +subcmd.where = function(playername, args) + local person, person_name + person_name, person, args = get_person(args) + if not person then + return "Specify a valid person" + end + local ent = people.people[person_name].entity + if not ent then + return person_name.." is inactive", false + end + return person_name.." is at "..minetest.pos_to_string(ent.object:getpos()), true +end + +subcmd.setowner = function(playername, person, person_name, args) + local person, person_name + person_name, person, args = get_person(args) + if not person then + return "Specify a valid person" + end + local ent = people.people[person_name].entity + if not ent then + return person_name.." is inactive", false + end + if not minetest.get_player_by_name(args) then + return "No such new owner" + end + ent.owner = args + return "Set owner of "..person_name.. " to "..args, true +end + +subcmd.list = function(playername, args) + local count = 0 + for k, v in pairs(people.people) do + local msg = k.." : " + if v.entity then + msg = msg.."active at "..minetest.pos_to_string(v.entity.object:getpos()) + else + msg = msg.."inactive for another "..v.waketime - minetest.get_gametime().."s at "..minetest.pos_to_string(v.pos) + end + minetest.chat_send_player(playername, msg) + count = count + 1 + end + return count.." people", true +end + +subcmd.tell = function(playername, args) + local person, person_name + person_name, person, args = get_person(args) + if not person then + return "Specify a valid person" + end + local ent = people.people[person_name].entity + if not ent then + return person.name.." is inactive, so can't hear you", false + end + + if playername ~= ent.owner then + return person.name.." doesn't listen to you", false + end + + local sender = minetest.get_player_by_name(playername) + if not sender then return end + senderpos = sender:getpos() + ent.on_tell(sender, senderpos, args) +end + +subcmd.skin = function(playername, args) + local person, person_name + person_name, person, args = get_person(args) + if not args then + return "More arguments needed", false + end + + if not minetest.get_modpath("skins") then + return "Skins mod is not installed", false + end + + if person_name == "list" then + local texlist = "" + for _, skin in ipairs(skins.list) do + if string.match(skin, "^character_") then + if texlist ~= "" then texlist = texlist.." " end + texlist = texlist..string.sub(skin, 11) + end + end + return "Available skins: "..texlist, true + end + + if not person then + return "Specify a valid person, or 'list'", false + end + if not args then + return "Specify skin", false + end + + local req = "character_"..args + for _, skin in ipairs(skins.list) do + if skin == req then + person.entity.props.textures = {req..".png"} + person.entity:update_props() + return "Skin updated", true + end + end + return "No such skin as '"..args.."'", false + +end + + +minetest.register_chatcommand("people", { + params = " [name] [args]", + description = "Commands for working with the people module. 'people help' for help.", + func = function(name, param) + + if not minetest.check_player_privs(name, {server=true}) then + return "People commands are currently all restricted to admins", false + end + + local cmd, args + cmd, args = string.match(param, "^([^ ]+)(.*)") + if not cmd then return subcmd.help(nil, nil, nil, nil) end + + if subcmd[cmd] then + if args then args = string.sub(args, 2) end + return subcmd[cmd](name, args) + end + return "No such people command '"..cmd.."' - see 'people help'", false + end +}) + + + diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..923677c --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +areas? diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..dac9885 --- /dev/null +++ b/init.lua @@ -0,0 +1,778 @@ + +local dbg +if moddebug then dbg=moddebug.dbg("people") else dbg={v1=function() end,v2=function() end,v3=function() end} end + +people = {} + +local people_modpath = minetest.get_modpath("people") +dofile(people_modpath .. "/commands.lua") +dofile(people_modpath .. "/tracking.lua") + + +people.is_valid_name = function(name) + if not name then return false end + -- Characters must be valid + if not name:match("^[A-Za-z0-9%_%-]+$") then return false end + -- Can't be the name of a player + if minetest.get_player_last_online(name) then return false end + return true +end + + +local animations = { + stand = { x= 0, y= 79, }, + lay = { x=162, y=166, }, + walk = { x=168, y=187, }, + mine = { x=189, y=198, }, + walk_mine = { x=200, y=219, }, + sit = { x= 81, y=160, }, +} + + +local face_dir = function(pos1, pos2) + local dx = pos1.x - pos2.x + local dz = pos2.z - pos1.z + return math.atan2(dx, dz) +end + +local walk_velocity = function(speed, yaw) + if speed == 0 then + return {x=0, y=0, z=0} + end + yaw = yaw + math.pi * 0.5 + local x = math.cos(yaw) * speed + local z = math.sin(yaw) * speed + return {x=x, y=0, z=z} +end + + + +--- Find the next node along a footpath +-- All positions are exact (rounded) node positions. +-- @param curpos The position of a current footpath node +-- @param lastpos The position of the previous footpath node +-- @param samedironly True to only look in the current direction of travel +-- @return The position of the next footpath node, or nil +local footpath_findnext = function(curpos, lastpos, samedironly) + dbg.v3("footpath_findnext, cur="..minetest.pos_to_string(curpos)..", last="..minetest.pos_to_string(lastpos)..", same="..dump(samedironly)) + local xz + if samedironly then + xz = {} + else + xz = {{x=1,z=0}, {x=0,z=1}, {x=-1,z=0}, {x=0,z=-1}} + end + -- Favour the direction we're already going + -- TODO - that means we could check it twice (but then again, only + -- if we reach an invalid bit of footpath! + table.insert(xz, 1, {x=curpos.x-lastpos.x, z=curpos.z-lastpos.z}) + for y = 1, -1, -1 do + for _, cxz in ipairs(xz) do + local x = cxz.x + local z = cxz.z + local npos = vector.add(curpos, vector.new(x, y, z)) + if not vector.equals(npos, lastpos) then + local n = minetest.get_node(npos) + if n.name == 'default:cobble' or + n.name == 'stairs:stair_cobble' or + n.name == 'default:wood' or + n.name == 'stairs:stair_wood' then + local n = minetest.get_node({x=npos.x,y=npos.y+1,z=npos.z}) + if n.name == "default:snow" then + -- Snow is walkable, but we will either walk over it + -- or dig it out of the way, so that's fine... + dbg.v3("footpath_findnext found (snow-covered) "..minetest.pos_to_string(npos)) + return npos + end + -- Otherwise, so long as there's nothing walkable above the + -- node it should be a valid footpath node... + if not minetest.registered_nodes[n.name].walkable then + dbg.v3("footpath_findnext found "..minetest.pos_to_string(npos)) + return npos + end + end + end + end + end + return nil +end + + +local escape_pattern +do + local matches = + { + ["^"] = "%^"; + ["$"] = "%$"; + ["("] = "%("; + [")"] = "%)"; + ["%"] = "%%"; + ["."] = "%."; + ["["] = "%["; + ["]"] = "%]"; + ["*"] = "%*"; + ["+"] = "%+"; + ["-"] = "%-"; + ["?"] = "%?"; + ["\0"] = "%z"; + } + + escape_pattern = function(s) + return (s:gsub(".", matches)) + end +end + + +-- Contains all action handlers. Each action handler takes a 'state' table as +-- a parameter, and returns true if the current action is complete, false +-- otherwise. +people.actions = {} + + +people.actions.step = function(state) + local event = {type="step", dtime=state.dtime} + local err = people.exec_event(self, event) + if err then dbg.v1(state.ent.name ..":Lua error "..err) end + state.yaw = self.env.yaw + state.speed = self.env.speed + return false +end + +people.actions.face = function(state) + if state.action.pos and state.action.pos.x and state.action.pos.y and state.action.pos.z then + state.yaw = face_dir(statepos, state.action.pos) + end + return true +end + +people.actions.wait = function(state) + if state.action.time and tonumber(state.action.time) then + state.wait = tonumber(state.action.time) + end + return true +end + +people.actions.follow = function(state) + + if not state.action.name or type(state.action.name) ~= "string" then + dbg.v1(state.ent.name.." has invalid follow target") + return true + end + + local player = minetest.get_player_by_name(state.action.name) + if not player then + dbg.v1(state.ent.name.." can't find "..state.action.name.." to follow them") + return true + end + + local targetpos = player:getpos() + local dist = vector.length(vector.subtract(targetpos, state.pos)) + if dist < 5 then + -- We're near enough, so just face the target and wait a bit + state.yaw = face_dir(state.pos, targetpos) + state.wait = 4 + return false + end + + local dir = math.random(math.pi*2) + targetpos = vector.add(targetpos, walk_velocity(2, dir)) + targetpos = vector.round(targetpos) + -- TODO find surface Y + dbg.v3(state.ent.name.." following "..state.action.name.." via "..minetest.pos_to_string(targetpos)) + state.action = {"go", pos=targetpos, prevaction=state.action} + return false + +end + +people.actions.go = function(state) + + if (not state.action.pos) and (not state.action.footpathdest) and state.action.name and areas and type(state.action.name) == "string" then + + -- Look for a path node with the right name + local pathdestarea = areas:findNearestArea(state.pos, "^path_"..escape_pattern(state.action.name).."$") + if pathdestarea then + + dbg.v2(state.ent.name.." selected path destination "..pathdestarea.name) + + local pathstartarea = areas:findNearestArea(state.pos, "^path_.+") + if pathstartarea then + dbg.v2(state.ent.name.." selected path start "..pathstartarea.name.." at "..minetest.pos_to_string(pathstartarea.pos1)) + state.action.pos = vector.new(pathstartarea.pos1) + state.action.pos.y = state.action.pos.y + 0.5 + state.action.footpathdest = pathdestarea + return false + end + end + + -- No path node, so look for any area with the actual name and + -- just go there. (TODO: could then find the nearest path junction + -- to it and head for that) + local nearest = areas:findNearestArea(state.pos, "$"..escape_pattern(state.action.name).."^") + if not nearest then + dbg.v2(state.ent.name.." couldn't find location "..state.action.name) + return true + end + + dbg.v2(state.ent.name.." set destination for centre of area "..nearest.name) + state.action.pos = vector.interpolate(nearest.pos1, nearest.pos2, 0.5) + state.action.pos.y = state.action.pos.y - 0.5 + return false + + end + + if not state.action.pos and state.action.footpathdest then + + -- path handling - only comes here when we've arrived at a new path square + -- (note, the range passed to findNearestArea determines our lookahead distance + local curpatharea, distance = areas:findNearestArea(state.pos, "^path_.+", nil, 10) + dbg.v3(state.ent.name.." at new footpath node at "..minetest.pos_to_string(state.pos)) + if curpatharea and curpatharea.pos1.x == state.pos.x and curpatharea.pos1.z == state.pos.z then + + if curpatharea.name == state.action.footpathdest.name then + dbg.v2(state.ent.name.." arrived at footpath destination") + return true + end + + -- We're at a junction + dbg.v2(state.ent.name.." is at footpath junction "..curpatharea.name.." - looking for route to "..state.action.name) + state.action.lastpathpos = vector.new(state.pos.x, state.pos.y - 0.5, state.pos.z) + local nextpathdest = areas:findNearestArea(state.pos, "^to_.*"..escape_pattern(state.action.name)..";.*", 3) + if not nextpathdest then + nextpathdest = areas:findNearestArea(state.pos, "^to_%*$", 3) + end + if not nextpathdest then + dbg.v2(state.ent.name.." can't find next footpath direction") + return true + end + dbg.v2(state.ent.name.." leaving junction via "..nextpathdest.name.." "..minetest.pos_to_string(nextpathdest.pos1)) + state.action.pos = vector.add(nextpathdest.pos1, {x=0, y=-0.5, z=0}) + return false + + end + + if not state.action.lastpathpos then + dbg.v1(state.ent.name.." should have lastpathpos") + return true + end + + local thispathpos = vector.new(state.pos.x, state.pos.y - 0.5, state.pos.z) + local nextpathpos = footpath_findnext(thispathpos, state.action.lastpathpos, false) + if not nextpathpos then + dbg.v1(state.ent.name.." can't find next footpath node") + return true + end + + if not distance then distance = 10 end + while distance > 2 do + -- Look ahead a bit while going in a straight line, to increase speed + local aheadpathpos = footpath_findnext(nextpathpos, thispathpos, true) + if aheadpathpos then + thispathpos = nextpathpos + nextpathpos = aheadpathpos + distance = distance - 1 + else + break + end + end + state.action.lastpathpos = thispathpos + state.action.pos = vector.add(nextpathpos, {x=0, y=0.5, z=0}) + dbg.v3(state.ent.name.." set next footpath dest "..minetest.pos_to_string(state.action.pos)) + return false + + end + + if not state.action.pos or not state.action.pos.x or not state.action.pos.y or not state.action.pos.z then + dbg.v1(state.ent.name.." has invalid go action") + return true + end + + -- Get our current destination, which might be either our + -- actual final one, or an intermediate point + local curdest + if state.action.intermediate then + curdest = state.action.intermediate[1] + else + curdest = state.action.pos + end + + if not (type(curdest) == "table" and curdest.x and curdest.y and curdest.z) then + dbg.v1(state.ent.name.." has invalid destination") + curdest = pos + end + + local distance = vector.distance({x=state.pos.x, y=0, z=state.pos.z}, {x=curdest.x, y=0, z=curdest.z}) + if distance < 0.2 then + if state.action.intermediate then + dbg.v3(state.ent.name.." arrived intermediate ") + if #state.action.intermediate == 1 then + state.action.intermediate = nil + else + table.remove(state.action.intermediate, 1) + end + end + + dbg.v2(state.ent.name.." arrived near "..minetest.pos_to_string(curdest)) + state.setpos = {x=curdest.x, y=state.pos.y, z=curdest.z} + if state.action.footpathdest or not state.action.intermediate then + -- If we arrived at the pos, but we still have a + -- pathdest or intermediate dest, we carry on to do that. + state.action.pos = nil + return false + end + -- We've finished! + dbg.v1(state.ent.name.." completed go action at "..minetest.pos_to_string(curdest)) + return true + + else + + local colres = state.ent.object:get_last_collision_result() + if colres.collides_xz then + dbg.v2(state.ent.name.." collided at "..minetest.pos_to_string(state.pos)) + -- We've hit something... + if distance < 32 then + local path = minetest.find_path(state.pos, curdest, + distance + 2, 1, 3, "A*_noprefetch") + if not path then + + dbg.v2(state.ent.name.." cannot find path from ".. + minetest.pos_to_string(state.pos).." to ".. + minetest.pos_to_string(curdest)) + if state.action.intermediate then + state.action.intermediate = nil + end + state.wait = 2 + return false + + else + if not state.action.intermediate then + state.action.intermediate = {} + end + -- for i = #path, 2, -1 do -- OLD implementation - opposite order to new implementation! + for i = 1, #path-1 do + table.insert(state.action.intermediate, 1, {x=path[i].x, y=path[i].y + 0.5, z=path[i].z}) + end + dbg.v3(state.ent.name.." found path: "..dump(path)) + end + else + -- pick a couple of nearby points and walk to them, then try again + local randomdir = math.random(math.pi * 2) + vec = walk_velocity(24, randomdir) + local rpos = {x=math.floor(state.pos.x + vec.x + 0.5), y=state.pos.y, z=math.floor(state.pos.z + vec.z + 0.5)} + randomdir = math.random(math.pi * 2) + vec = walk_velocity(24, randomdir) + local rpos2 = {x=math.floor(rpos.x + vec.x + 0.5), y=state.pos.y, z=math.floor(rpos.z + vec.z + 0.5)} + if not state.action.intermediate then + state.action.intermediate = {} + end + table.insert(state.action.intermediate, 1, rpos2) + table.insert(state.action.intermediate, 1, rpos) + + dbg.v2(state.ent.name.." hit something, far from destination - talking a random detour") + end + else + if distance < 1.5 then + state.speed = distance * 0.75 + else + state.speed = 2 + end + state.yaw = face_dir(state.pos, curdest) + end + + end + + return false + +end + +local lastformbyplayer = {} +minetest.register_on_player_receive_fields(function(sender, formname, fields) + if formname ~= "people:form" then return end + if fields.quit then return end + if not fields.program then return end + local playername = sender:get_player_name() + local ent = lastformbyplayer[playername] + if not ent then return end + if playername ~= ent.owner then return end + ent.metadata.code = fields.code + local event = {type="program"} + local err = people.exec_event(ent, event) + if err then dbg.v1("Lua error "..err) end +end) + +minetest.register_entity("people:person" ,{ + hp_max = 1, + physical = true, + armor_groups = {immortal=1}, + collisionbox = {-0.35,0,-0.35, 0.35,1.75,0.35}, + visual = "mesh", + visual_size = {x=1, y=1}, + mesh = "people_character.x", + textures = {"people_character.png"}, + makes_footstep_sound = true, + name = "APerson", + owner = "", + metadata = { + code = "", + memory = {}, + -- Current action. A table, as described in README.md + action = nil, + }, + + -- Time (game time) to wait until before doing anything else + wait = 0, + + -- Lua environment + env = {}, + + stepheight = 1.1, + + -- Customised properties + props = {}, + + on_activate = function(self, staticdata) + + dbg.v3("on_activate, staticdata = "..dump(staticdata)) + if staticdata and staticdata ~= "" then + local data = minetest.deserialize(staticdata) + if data then + if data.metadata then + self.metadata = data.metadata + end + if data.name then + self.name = data.name + end + if data.owner then + self.owner = data.owner + end + if data.wait then + self.wait = data.wait + end + if data.props then + self.props = data.props + end + end + + if not people.is_valid_name(self.name) then + self.object:remove() + dbg.v1("Removing badly named person") + return + end + + -- Entity becomes active + people.people_set_active(self) + end + + self.env = people.create_environment(self) + + self:update_props() + + self.anim = nil + + local event = {type="activate", dtime_s=dtime_s} + local err = people.exec_event(self, event) + if err then dbg.v1("Lua error "..err) end + end, + + update_props = function(self) + self.object:set_properties(self.props) + end, + + on_deactivate = function(self) + people.people_set_inactive(self) + end, + + get_staticdata = function(self) + + local data = { + name = self.name, + owner = self.owner, + metadata = self.metadata, + wait = self.wait, + props = self.props, + } + return minetest.serialize(data) + end, + + on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir, killed) + if killed then + if people.people[self.name] then + people.people[self.name].dead = true + else + dbg.v1("Unknown person killed") + end + return + end + + local playername = puncher:get_player_name() + if playername then + local event = {type="punched", puncher=playername} + local err = people.exec_event(self, event) + if err then dbg.v1("Lua error "..err) end + end + + end, + + on_rightclick = function(self, clicker) + local playername = clicker:get_player_name() + errmsg = "..." + if playername == self.owner then + formspec = "size[10,8]".. + "textarea[0.2,0.6;10.2,5;code;;"..minetest.formspec_escape(self.metadata.code).."]".. + "button[3.75,6;2.5,1;program;Program]".. + "label[0.1,5;"..minetest.formspec_escape(errmsg).."]" + else + local message = "Hello non-owner" + formspec = "size[8,4]" + .."label[0,0;"..message.."]" + end + minetest.show_formspec(playername, "people:form", formspec) + lastformbyplayer[playername] = self + end, + + on_tell = function(self, sender, senderpos, message) + local event = {type="tell", sender=sender, senderpos=senderpos, message=message} + local err = people.exec_event(self, event) + if err then dbg.v1("Lua error "..err) end + end, + + on_step = function(self, dtime) + + if self.wait ~= 0 then + if minetest.get_gametime() < self.wait then return end + dbg.v3(self.name.." finished wait at "..minetest.get_gametime()) + self.wait = 0 + end + + -- Prepare state table for action handler + local state = { + + -- In - current yaw, Out - used as new yaw + yaw = self.object:getyaw(), + + -- In - current position + pos = self.object:getpos(), + + -- In - 0, Out - new speed, in yaw direction + speed = 0, + + -- Out - if set, a new position to set + setpos = nil, + + -- In - current action, Out - modified action + action = self.metadata.action, + + -- In - 0, Out - non-zero sets a wait of that many seconds - doing this + -- will cause a wait and then the current action will + -- continue - different to setting a "wait" action! + wait = 0, + + -- In - the entity, in case anything needs to be called on it (avoid + -- that if possible, but for example, getting the last collision + -- result is currently done this way) + ent = self, + + -- In - dtime + dtime = dtime, + } + + local action_done = false + if not state.action or not state.action[1] then + -- No current action, so let the lua code choose one... + local event = {type="act", dtime=state.dtime} + local err = people.exec_event(self, event) + if err then dbg.v1("Lua error "..err) end + state.action = self.metadata.action + if not state.action then + self.metadata.action = {"wait", time=120} + dbg.v2(state.ent.name.." failed to choose action - setting wait") + else + dbg.v1(state.ent.name.." set new action: "..dump(self.metadata.action)) + end + state.action = self.metadata.action + end + + -- Run the appropriate handler for the current action... + local handler = people.actions[state.action[1]] + if handler then + action_done = handler(state) + -- Because state.action can be replaced... + self.metadata.action = state.action + else + dbg.v1(state.ent.name.." has unknown action: "..dump(self.metadata.action)) + state.action = nil + end + + if action_done then + if state.action.prevaction then + self.metadata.action = state.action.prevaction + else + self.metadata.action = nil + end + end + if state.wait ~= 0 then + self.wait = minetest.get_gametime() + state.wait + dbg.v3("Set "..self.name.." to wait until "..self.wait) + if state.wait > 30 then + self.object:set_autonomous(0) + else + self.object:set_autonomous(1) + end + else + self.object:set_autonomous(1) + end + + -- Set appropriate animation + local wantanim = "stand" + if state.speed > 0 then + wantanim = "walk" + end + if wantanim ~= self.anim then + self.object:set_animation(animations[wantanim], 15, 0) + self.anim = wantanim + end + + if state.setpos then + self.object:setpos(state.setpos) + end + local setvel = walk_velocity(state.speed, state.yaw) + setvel.y = -10 + self.object:setvelocity(setvel) + self.object:setyaw(state.yaw) + + end, + +}) + +people.create_environment = function(ent) + + return { + mem = ent.metadata.memory, + log = function(msg) + dbg.v1(" >> "..msg) + end, + tostring = tostring, + tonumber = tonumber, + type = type, + string = { + byte = string.byte, + char = string.char, + find = string.find, + format = string.format, + gmatch = string.gmatch, + gsub = string.gsub, + len = string.len, + lower = string.lower, + upper = string.upper, + match = string.match, + rep = string.rep, + reverse = string.reverse, + sub = string.sub, + }, + math = { + abs = math.abs, + acos = math.acos, + asin = math.asin, + atan = math.atan, + atan2 = math.atan2, + ceil = math.ceil, + cos = math.cos, + cosh = math.cosh, + deg = math.deg, + exp = math.exp, + floor = math.floor, + fmod = math.fmod, + frexp = math.frexp, + huge = math.huge, + ldexp = math.ldexp, + log = math.log, + log10 = math.log10, + max = math.max, + min = math.min, + modf = math.modf, + pi = math.pi, + pow = math.pow, + rad = math.rad, + random = math.random, + sin = math.sin, + sinh = math.sinh, + sqrt = math.sqrt, + tan = math.tan, + tanh = math.tanh, + }, + table = { + insert = table.insert, + maxn = table.maxn, + remove = table.remove, + sort = table.sort + } + } +end + +local create_sandbox = function (code, env) + -- Create Sandbox + if code:byte(1) == 27 then + return _, "You Hacker You! Don't use binary code!" + end + f, msg = loadstring(code) + if not f then return nil, msg end + setfenv(f, env) + return f +end + +local code_prohibited = function(code) + -- Clean code + local prohibited = {"while", "for", "repeat", "until", "function", "goto"} + for _, p in ipairs(prohibited) do + if string.find(code, p) then + return "Prohibited command: "..p + end + end +end + +people.exec_event = function(ent, event) + + local code = ent.metadata.code + local env = ent.env + env.action = ent.metadata.action + + env.event = event + + local pos = ent.object:getpos() + local vel = ent.object:getvelocity() + local yaw = ent.object:getyaw() + env.pos = {x=pos.x,y=pos.y,z=pos.z} + env.vel = {x=vel.x,y=vel.y,z=vel.z} + env.yaw = yaw + env.speed = 0 + + local prohibited = code_prohibited(code) + if prohibited then return prohibited end + + -- create the sandbox and execute code + local chunk, msg = create_sandbox(code, env) + if not chunk then return msg end + local success, msg = pcall(chunk) + if not success then return msg end + + if env.action and ((not ent.metadata.action) or env.action[1] ~= ent.metadata.action[1]) then + -- Cancel a wait if the action type was changed + ent.wait = 0 + end + ent.metadata.action = env.action + +end + +local tick_wake = 0 +local rate_wake = 1 + +minetest.register_globalstep(function(dtime) + + tick_wake = tick_wake + dtime + + if tick_wake > rate_wake then + tick_wake = 0 + people.people_wake() + + end + +end) + diff --git a/models/people_character.blend b/models/people_character.blend new file mode 100644 index 0000000000000000000000000000000000000000..9931c3146ee4d4f9c15890538b8b9467c04a0367 GIT binary patch literal 517076 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 z@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?f zERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArhCLWRH5m_FQwFt9+Bk{Sssz) z5m_FQwFt9+Bk{Sssz)5m_FQwFt9+Bk{Sssz)5m_FQwFt z9+Bk{Sssz)5m_FQwFt9+Bk{Sssz)5m_FQwFt9+Bk{Sssz)5m_FQ zwFt9+Bk{Sssz)5m_FQwFt9+Bk{Sssz)5m_FQ$||iAQ94 zM3zTnc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oE zM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfHM3zTn zc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oEM`U?K zmPcfHM3zTnc|?{+WO=kO@rW#s$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Y zh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCR zkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD z@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERSBEctn;*WO+oEM`U?KmPcfH zM3zTnc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oE zM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfHM3zTn zc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfHM3zTnc|?{+WO+oEM`U?K zmPbnykI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Y zh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCR zkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD@`x;t$nuCRkI3?fERV?Yh%ArD z@`x;t$nuCRkI3?fERV?Yh%ArD^61rxM`U?KmPcfHM3zTnc|?{+WO+oEM`U?KmPcfH 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 literal 0 HcmV?d00001 diff --git a/models/people_character.x b/models/people_character.x new file mode 100644 index 0000000..d705232 --- /dev/null +++ b/models/people_character.x @@ -0,0 +1,1392 @@ +xof 0303txt 0032 + +template XSkinMeshHeader { + <3cf169ce-ff7c-44ab-93c0-f78f62d172e2> + WORD nMaxSkinWeightsPerVertex; + WORD nMaxSkinWeightsPerFace; + WORD nBones; +} + +template SkinWeights { + <6f0d123b-bad2-4167-a0d0-80224f25fabb> + STRING transformNodeName; + DWORD nWeights; + array DWORD vertexIndices[nWeights]; + array float weights[nWeights]; + Matrix4x4 matrixOffset; +} + +Frame Root { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + 0.000000, 1.000000,-0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Frame Armature { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + -0.000000, 0.000000, 0.078832, 1.000000;; + } + Frame Armature_Body { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000,-0.017220, 0.999852, 0.000000, + 0.000000,-0.999852,-0.017220, 0.000000, + -0.000000, 0.000000, 1.000000, 1.000000;; + } + Frame Armature_Head { + FrameTransformMatrix { + -0.999871,-0.000839,-0.016037, 0.000000, + -0.000562, 0.999852,-0.017221, 0.000000, + 0.016049,-0.017210,-0.999723, 0.000000, + 0.000000, 6.750000,-0.000000, 1.000000;; + } + } //End of Armature_Head + Frame Armature_Arm_Left { + FrameTransformMatrix { + 0.989045,-0.143906,-0.032893, 0.000000, + -0.143433,-0.989525, 0.016329, 0.000000, + -0.034898,-0.011432,-0.999325, 0.000000, + -2.000000, 6.750000,-0.000000, 1.000000;; + } + } //End of Armature_Arm_Left + Frame Armature_Arm_Right { + FrameTransformMatrix { + 0.989045, 0.143906, 0.032893, 0.000000, + 0.143433,-0.989525, 0.016329, 0.000000, + 0.034898,-0.011432,-0.999325, 0.000000, + 2.000000, 6.750000,-0.000000, 1.000000;; + } + } //End of Armature_Arm_Right + Frame Armature_Leg_Right { + FrameTransformMatrix { + 1.000000, 0.000000,-0.000000, 0.000000, + 0.000000,-0.017220,-0.999852, 0.000000, + -0.000000, 0.999851,-0.017220, 0.000000, + 1.000000,-0.000000,-0.000001, 1.000000;; + } + } //End of Armature_Leg_Right + Frame Armature_Leg_Left { + FrameTransformMatrix { + 1.000000, 0.000000,-0.000000, 0.000000, + 0.000000,-0.017220,-0.999852, 0.000000, + -0.000000, 0.999851,-0.017220, 0.000000, + -1.000000,-0.000000,-0.000001, 1.000000;; + } + } //End of Armature_Leg_Left + } //End of Armature_Body + Frame Player { + FrameTransformMatrix { + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 1.000000;; + } + Mesh { //Cube_001 Mesh + 168; + 2.000000;-1.000000; 6.750000;, + -2.000000;-1.000000; 6.750000;, + -2.000000;-1.000000;13.500000;, + 2.000000;-1.000000;13.500000;, + -2.000000;-1.000000; 6.750000;, + -2.000000; 1.000000; 6.750000;, + -2.000000; 1.000000;13.500000;, + -2.000000;-1.000000;13.500000;, + -2.000000; 1.000000; 6.750000;, + 2.000000; 1.000000; 6.750000;, + 2.000000; 1.000000;13.500000;, + -2.000000; 1.000000;13.500000;, + -2.000000; 1.000000; 6.750000;, + -2.000000;-1.000000; 6.750000;, + 2.000000;-1.000000; 6.750000;, + 2.000000; 1.000000; 6.750000;, + 2.000000; 1.000000;13.500000;, + 2.000000;-1.000000;13.500000;, + -2.000000;-1.000000;13.500000;, + -2.000000; 1.000000;13.500000;, + 0.000000;-1.000000; 6.750000;, + 0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 6.750000;, + -2.000000;-1.000000; 6.750000;, + -4.000000;-1.000000; 6.750000;, + -4.000000;-1.000000;13.500000;, + -2.000000;-1.000000;13.500000;, + -2.000000; 1.000000; 6.750000;, + -2.000000;-1.000000; 6.750000;, + -2.000000;-1.000000;13.500000;, + -2.000000; 1.000000;13.500000;, + -2.000000; 1.000000; 0.000000;, + -2.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + -2.000000;-1.000000; 0.000000;, + -2.000000; 1.000000; 0.000000;, + -2.000000; 1.000000; 6.750000;, + -2.000000;-1.000000; 6.750000;, + 2.000000;-2.000000;13.500000;, + -2.000000;-2.000000;13.500000;, + -2.000000;-2.000000;17.500000;, + 2.000000;-2.000000;17.500000;, + -2.000000;-2.000000;13.500000;, + -2.000000; 2.000000;13.500000;, + -2.000000; 2.000000;17.500000;, + -2.000000;-2.000000;17.500000;, + -2.000000; 2.000000;13.500000;, + 2.000000; 2.000000;13.500000;, + 2.000000; 2.000000;17.500000;, + -2.000000; 2.000000;17.500000;, + -2.000000; 2.000000;13.500000;, + -2.000000;-2.000000;13.500000;, + 2.000000;-2.000000;13.500000;, + 2.000000; 2.000000;13.500000;, + 2.000000; 2.000000;17.500000;, + 2.000000;-2.000000;17.500000;, + -2.000000;-2.000000;17.500000;, + -2.000000; 2.000000;17.500000;, + -0.000000;-1.000000; 0.000000;, + -2.000000;-1.000000; 0.000000;, + -2.000000;-1.000000; 6.750000;, + 0.000000;-1.000000; 6.750000;, + 0.000000; 1.000000; 6.750000;, + 0.000000; 1.000000; 0.000000;, + 2.000000; 1.000000; 0.000000;, + 2.000000; 1.000000; 6.750000;, + -2.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 6.750000;, + -2.000000; 1.000000; 6.750000;, + 2.000000;-1.000000; 6.750000;, + 4.000000;-1.000000; 6.750000;, + 4.000000; 1.000000; 6.750000;, + 2.000000; 1.000000; 6.750000;, + 4.000000;-1.000000;13.500000;, + 2.000000;-1.000000;13.500000;, + 2.000000; 1.000000;13.500000;, + 4.000000; 1.000000;13.500000;, + 2.000000;-1.000000; 6.750000;, + 2.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 6.750000;, + 0.000000; 1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 6.750000;, + 0.000000; 1.000000; 6.750000;, + 2.000000; 1.000000; 6.750000;, + 2.000000; 1.000000; 0.000000;, + 2.000000;-1.000000; 0.000000;, + 2.000000;-1.000000; 6.750000;, + 2.000000; 1.000000;13.500000;, + 2.000000; 1.000000; 6.750000;, + 2.000000;-1.000000; 6.750000;, + 2.000000;-1.000000;13.500000;, + 2.000000; 2.000000;17.500000;, + 2.000000; 2.000000;13.500000;, + 2.000000;-2.000000;13.500000;, + 2.000000;-2.000000;17.500000;, + 0.000000; 1.000000; 6.750000;, + 0.000000;-1.000000; 6.750000;, + -2.000000;-1.000000; 6.750000;, + -2.000000; 1.000000; 6.750000;, + -4.000000; 1.000000; 6.750000;, + -2.000000; 1.000000; 6.750000;, + -2.000000; 1.000000;13.500000;, + -4.000000; 1.000000;13.500000;, + -4.000000;-1.000000; 6.750000;, + -4.000000; 1.000000; 6.750000;, + -4.000000; 1.000000;13.500000;, + -4.000000;-1.000000;13.500000;, + 4.000000; 1.000000;13.500000;, + 4.000000; 1.000000; 6.750000;, + 4.000000;-1.000000; 6.750000;, + 4.000000;-1.000000;13.500000;, + -2.000000; 1.000000;13.500000;, + -2.000000;-1.000000;13.500000;, + -4.000000;-1.000000;13.500000;, + -4.000000; 1.000000;13.500000;, + 2.000000; 1.000000;13.500000;, + 2.000000; 1.000000; 6.750000;, + 4.000000; 1.000000; 6.750000;, + 4.000000; 1.000000;13.500000;, + 0.000000;-1.000000; 0.000000;, + 2.000000;-1.000000; 0.000000;, + 2.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 2.000000;-1.000000;13.500000;, + 2.000000;-1.000000; 6.750000;, + 2.000000; 1.000000; 6.750000;, + 2.000000; 1.000000;13.500000;, + -4.000000; 1.000000; 6.750000;, + -4.000000;-1.000000; 6.750000;, + -2.000000;-1.000000; 6.750000;, + -2.000000; 1.000000; 6.750000;, + 4.000000;-1.000000;13.500000;, + 4.000000;-1.000000; 6.750000;, + 2.000000;-1.000000; 6.750000;, + 2.000000;-1.000000;13.500000;, + 2.000000;-1.000000; 6.750000;, + 0.000000;-1.000000; 6.750000;, + 0.000000; 1.000000; 6.750000;, + 2.000000; 1.000000; 6.750000;, + 2.200000;-2.200000;13.300000;, + -2.200000;-2.200000;13.300000;, + -2.200000;-2.200000;17.700001;, + 2.200000;-2.200000;17.700001;, + -2.200000;-2.200000;13.300000;, + -2.200000; 2.200000;13.300000;, + -2.200000; 2.200000;17.700001;, + -2.200000;-2.200000;17.700001;, + -2.200000; 2.200000;13.300000;, + 2.200000; 2.200000;13.300000;, + 2.200000; 2.200000;17.700001;, + -2.200000; 2.200000;17.700001;, + -2.200000; 2.200000;13.300000;, + -2.200000;-2.200000;13.300000;, + 2.200000;-2.200000;13.300000;, + 2.200000; 2.200000;13.300000;, + 2.200000; 2.200000;17.700001;, + 2.200000;-2.200000;17.700001;, + -2.200000;-2.200000;17.700001;, + -2.200000; 2.200000;17.700001;, + 2.200000; 2.200000;17.700001;, + 2.200000; 2.200000;13.300000;, + 2.200000;-2.200000;13.300000;, + 2.200000;-2.200000;17.700001;; + 42; + 4;0;1;2;3;, + 4;4;5;6;7;, + 4;8;9;10;11;, + 4;12;13;14;15;, + 4;16;17;18;19;, + 4;20;21;22;23;, + 4;24;25;26;27;, + 4;28;29;30;31;, + 4;32;33;34;35;, + 4;36;37;38;39;, + 4;40;41;42;43;, + 4;44;45;46;47;, + 4;48;49;50;51;, + 4;52;53;54;55;, + 4;56;57;58;59;, + 4;60;61;62;63;, + 4;64;65;66;67;, + 4;68;69;70;71;, + 4;72;73;74;75;, + 4;76;77;78;79;, + 4;80;81;82;83;, + 4;84;85;86;87;, + 4;88;89;90;91;, + 4;92;93;94;95;, + 4;96;97;98;99;, + 4;100;101;102;103;, + 4;104;105;106;107;, + 4;108;109;110;111;, + 4;112;113;114;115;, + 4;116;117;118;119;, + 4;120;121;122;123;, + 4;124;125;126;127;, + 4;128;129;130;131;, + 4;132;133;134;135;, + 4;136;137;138;139;, + 4;140;141;142;143;, + 4;144;145;146;147;, + 4;148;149;150;151;, + 4;152;153;154;155;, + 4;156;157;158;159;, + 4;160;161;162;163;, + 4;164;165;166;167;; + MeshNormals { //Cube_001 Normals + 168; + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 1.000000; 0.000000;-0.000000;, + 1.000000; 0.000000;-0.000000;, + 1.000000; 0.000000;-0.000000;, + 1.000000; 0.000000;-0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000;-0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 1.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + -0.000000;-1.000000; 0.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-0.000000; 1.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + 0.000000;-1.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + -1.000000; 0.000000; 0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 1.000000;-0.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000;-1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 0.000000; 0.000000; 1.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;, + 1.000000; 0.000000; 0.000000;; + 42; + 4;0;1;2;3;, + 4;4;5;6;7;, + 4;8;9;10;11;, + 4;12;13;14;15;, + 4;16;17;18;19;, + 4;20;21;22;23;, + 4;24;25;26;27;, + 4;28;29;30;31;, + 4;32;33;34;35;, + 4;36;37;38;39;, + 4;40;41;42;43;, + 4;44;45;46;47;, + 4;48;49;50;51;, + 4;52;53;54;55;, + 4;56;57;58;59;, + 4;60;61;62;63;, + 4;64;65;66;67;, + 4;68;69;70;71;, + 4;72;73;74;75;, + 4;76;77;78;79;, + 4;80;81;82;83;, + 4;84;85;86;87;, + 4;88;89;90;91;, + 4;92;93;94;95;, + 4;96;97;98;99;, + 4;100;101;102;103;, + 4;104;105;106;107;, + 4;108;109;110;111;, + 4;112;113;114;115;, + 4;116;117;118;119;, + 4;120;121;122;123;, + 4;124;125;126;127;, + 4;128;129;130;131;, + 4;132;133;134;135;, + 4;136;137;138;139;, + 4;140;141;142;143;, + 4;144;145;146;147;, + 4;148;149;150;151;, + 4;152;153;154;155;, + 4;156;157;158;159;, + 4;160;161;162;163;, + 4;164;165;166;167;; + } //End of Cube_001 Normals + MeshMaterialList { //Cube_001 Material List + 1; + 42; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0;; + Material Character { + 0.640000; 0.640000; 0.640000; 1.000000;; + 96.078431; + 0.000000; 0.000000; 0.000000;; + 0.000000; 0.000000; 0.000000;; + TextureFilename {"character.png";} + } + } //End of Cube_001 Material List + MeshTextureCoords { //Cube_001 UV Coordinates + 168; + 0.625000; 1.000000;, + 0.500000; 1.000000;, + 0.500000; 0.625000;, + 0.625000; 0.625000;, + 0.500000; 1.000000;, + 0.437500; 1.000000;, + 0.437500; 0.625000;, + 0.500000; 0.625000;, + 0.437500; 1.000000;, + 0.312500; 1.000000;, + 0.312500; 0.625000;, + 0.437500; 0.625000;, + 0.437500; 0.625000;, + 0.437500; 0.500000;, + 0.562500; 0.500000;, + 0.562500; 0.625000;, + 0.312500; 0.625000;, + 0.312500; 0.500000;, + 0.437500; 0.500000;, + 0.437500; 0.625000;, + 0.125000; 0.625000;, + 0.125000; 1.000000;, + 0.187500; 1.000000;, + 0.187500; 0.625000;, + 0.812500; 1.000000;, + 0.875000; 1.000000;, + 0.875000; 0.625000;, + 0.812500; 0.625000;, + 0.750000; 1.000000;, + 0.812500; 1.000000;, + 0.812500; 0.625000;, + 0.750000; 0.625000;, + 0.125000; 0.625000;, + 0.125000; 0.500000;, + 0.187500; 0.500000;, + 0.187500; 0.625000;, + 0.000000; 1.000000;, + 0.062500; 1.000000;, + 0.062500; 0.625000;, + 0.000000; 0.625000;, + 0.500000; 0.500000;, + 0.375000; 0.500000;, + 0.375000; 0.250000;, + 0.500000; 0.250000;, + 0.375000; 0.500000;, + 0.250000; 0.500000;, + 0.250000; 0.250000;, + 0.375000; 0.250000;, + 0.250000; 0.500000;, + 0.125000; 0.500000;, + 0.125000; 0.250000;, + 0.250000; 0.250000;, + 0.250000; 0.250000;, + 0.250000; 0.000000;, + 0.375000; 0.000000;, + 0.375000; 0.250000;, + 0.125000; 0.250000;, + 0.125000; 0.000000;, + 0.250000; 0.000000;, + 0.250000; 0.250000;, + 0.250000; 1.000000;, + 0.187500; 1.000000;, + 0.187500; 0.625000;, + 0.250000; 0.625000;, + 0.062500; 0.625000;, + 0.062500; 1.000000;, + 0.125000; 1.000000;, + 0.125000; 0.625000;, + 0.125000; 1.000000;, + 0.062500; 1.000000;, + 0.062500; 0.625000;, + 0.125000; 0.625000;, + 0.750000; 0.500000;, + 0.812500; 0.500000;, + 0.812500; 0.625000;, + 0.750000; 0.625000;, + 0.687500; 0.500000;, + 0.750000; 0.500000;, + 0.750000; 0.625000;, + 0.687500; 0.625000;, + 0.187500; 0.625000;, + 0.187500; 1.000000;, + 0.250000; 1.000000;, + 0.250000; 0.625000;, + 0.187500; 1.000000;, + 0.125000; 1.000000;, + 0.125000; 0.625000;, + 0.187500; 0.625000;, + 0.062500; 0.625000;, + 0.062500; 1.000000;, + 0.000000; 1.000000;, + 0.000000; 0.625000;, + 0.312500; 0.625000;, + 0.312500; 1.000000;, + 0.250000; 1.000000;, + 0.250000; 0.625000;, + 0.125000; 0.250000;, + 0.125000; 0.500000;, + 0.000000; 0.500000;, + 0.000000; 0.250000;, + 0.062500; 0.625000;, + 0.062500; 0.500000;, + 0.125000; 0.500000;, + 0.125000; 0.625000;, + 0.687500; 1.000000;, + 0.750000; 1.000000;, + 0.750000; 0.625000;, + 0.687500; 0.625000;, + 0.687500; 1.000000;, + 0.625000; 1.000000;, + 0.625000; 0.625000;, + 0.687500; 0.625000;, + 0.625000; 0.625000;, + 0.625000; 1.000000;, + 0.687500; 1.000000;, + 0.687500; 0.625000;, + 0.750000; 0.625000;, + 0.750000; 0.500000;, + 0.687500; 0.500000;, + 0.687500; 0.625000;, + 0.750000; 0.625000;, + 0.750000; 1.000000;, + 0.687500; 1.000000;, + 0.687500; 0.625000;, + 0.187500; 0.500000;, + 0.125000; 0.500000;, + 0.125000; 0.625000;, + 0.187500; 0.625000;, + 0.812500; 0.625000;, + 0.812500; 1.000000;, + 0.750000; 1.000000;, + 0.750000; 0.625000;, + 0.812500; 0.625000;, + 0.812500; 0.500000;, + 0.750000; 0.500000;, + 0.750000; 0.625000;, + 0.875000; 0.625000;, + 0.875000; 1.000000;, + 0.812500; 1.000000;, + 0.812500; 0.625000;, + 0.125000; 0.500000;, + 0.062500; 0.500000;, + 0.062500; 0.625000;, + 0.125000; 0.625000;, + 1.000000; 0.500000;, + 0.875000; 0.500000;, + 0.875000; 0.250000;, + 1.000000; 0.250000;, + 0.875000; 0.500000;, + 0.750000; 0.500000;, + 0.750000; 0.250000;, + 0.875000; 0.250000;, + 0.750000; 0.500000;, + 0.625000; 0.500000;, + 0.625000; 0.250000;, + 0.750000; 0.250000;, + 0.750000; 0.250000;, + 0.750000; 0.000000;, + 0.875000; 0.000000;, + 0.875000; 0.250000;, + 0.625000; 0.250000;, + 0.625000; 0.000000;, + 0.750000; 0.000000;, + 0.750000; 0.250000;, + 0.625000; 0.250000;, + 0.625000; 0.500000;, + 0.500000; 0.500000;, + 0.500000; 0.250000;; + } //End of Cube_001 UV Coordinates + XSkinMeshHeader { + 1; + 3; + 6; + } + SkinWeights { + "Armature_Body"; + 24; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 92, + 93, + 94, + 95; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + 1.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000,-1.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + 0.000000,-6.750000,-0.000001, 1.000000;; + } //End of Armature_Body Skin Weights + SkinWeights { + "Armature_Head"; + 48; + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 96, + 97, + 98, + 99, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + -1.000000, 0.000000,-0.000000, 0.000000, + -0.000000,-0.000000, 1.000000, 0.000000, + 0.000000, 1.000000, 0.000000, 0.000000, + -0.000000,-13.500000,-0.000002, 1.000000;; + } //End of Armature_Head Skin Weights + SkinWeights { + "Armature_Arm_Left"; + 24; + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 116, + 117, + 118, + 119, + 132, + 133, + 134, + 135; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + 0.989214,-0.143940,-0.027164, 0.000000, + 0.027450,-0.000000, 0.999623, 0.000000, + -0.143886,-0.989587, 0.003951, 0.000000, + 3.920884,13.071539,-0.107668, 1.000000;; + } //End of Armature_Arm_Left Skin Weights + SkinWeights { + "Armature_Arm_Right"; + 24; + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 113, + 114, + 115, + 120, + 121, + 122, + 123, + 128, + 129, + 130, + 131, + 136, + 137, + 138, + 139; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + 0.989214, 0.143940, 0.027164, 0.000000, + -0.027450,-0.000000, 0.999623, 0.000000, + 0.143886,-0.989587, 0.003951, 0.000000, + -3.920884,13.071539,-0.107668, 1.000000;; + } //End of Armature_Arm_Right Skin Weights + SkinWeights { + "Armature_Leg_Right"; + 24; + 20, + 21, + 22, + 23, + 64, + 65, + 66, + 67, + 80, + 81, + 82, + 83, + 88, + 89, + 90, + 91, + 124, + 125, + 126, + 127, + 140, + 141, + 142, + 143; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + 1.000000,-0.000000,-0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + -0.000000,-1.000000, 0.000000, 0.000000, + -1.000000, 6.750001,-0.000001, 1.000000;; + } //End of Armature_Leg_Right Skin Weights + SkinWeights { + "Armature_Leg_Left"; + 24; + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 60, + 61, + 62, + 63, + 68, + 69, + 70, + 71, + 84, + 85, + 86, + 87, + 100, + 101, + 102, + 103; + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000, + 1.000000; + 1.000000,-0.000000,-0.000000, 0.000000, + 0.000000, 0.000000, 1.000000, 0.000000, + -0.000000,-1.000000, 0.000000, 0.000000, + 1.000000, 6.750001,-0.000001, 1.000000;; + } //End of Armature_Leg_Left Skin Weights + } //End of Cube_001 Mesh + } //End of Player + } //End of Armature +} //End of Root Frame +AnimationSet { + Animation { + {Armature_Body} + AnimationKey { //Position + 2; + 8; + 0;3; -0.000000, 0.000000, 6.750000;;, + 80;3; -0.000000, 0.000000, 6.750000;;, + 81;3; -0.000000, 0.000000, 1.000000;;, + 161;3; -0.000000, 0.000000, 1.000000;;, + 162;3; -0.000000, 2.000001, 1.000000;;, + 167;3; -0.000000, 2.000001, 1.000000;;, + 168;3; -0.000000, 0.000000, 6.750000;;, + 220;3; -0.000000, 0.000000, 6.750000;;; + } + AnimationKey { //Rotation + 0; + 25; + 0;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 20;4; -0.675590, 0.737277, 0.000000, 0.000000;;, + 40;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 60;4; -0.675590, 0.737277, 0.000000, 0.000000;;, + 80;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 81;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 101;4; -0.675590, 0.737277, 0.000000, 0.000000;;, + 121;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 141;4; -0.675590, 0.737277, 0.000000, 0.000000;;, + 161;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 162;4; 0.000000, 1.000000, 0.000000, 0.000000;;, + 167;4; 0.000000, 1.000000, 0.000000, 0.000000;;, + 168;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 173;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 178;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 183;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 188;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 189;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 194;4; -0.737277, 0.675590, 0.000000, 0.000000;;, + 199;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 200;4; -0.707107, 0.707107, 0.000000, 0.000000;;, + 205;4; -0.675590, 0.737277, 0.000000, 0.000000;;, + 210;4; -0.737277, 0.675590, 0.000000, 0.000000;;, + 215;4; -0.675590, 0.737277, 0.000000, 0.000000;;, + 220;4; -0.707107, 0.707107, 0.000000, 0.000000;;; + } + AnimationKey { //Scale + 1; + 1; + 0;3; 1.000000, 1.000000, 1.000000;;; + } + } + Animation { + {Armature_Head} + AnimationKey { //Position + 2; + 1; + 0;3; 0.000000, 6.750000,-0.000000;;; + } + AnimationKey { //Rotation + 0; + 25; + 0;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 20;4; -0.021794,-0.000951, 0.998810,-0.043609;;, + 40;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 60;4; -0.021794,-0.000951,-0.998811, 0.043609;;, + 80;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 81;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 101;4; -0.021794,-0.000951, 0.998810,-0.043609;;, + 121;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 141;4; -0.021794,-0.000951,-0.998811, 0.043609;;, + 161;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 162;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 167;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 168;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 173;4; -0.043620,-0.000000,-0.999048,-0.000000;;, + 178;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 183;4; -0.043619,-0.000000, 0.999048, 0.000000;;, + 188;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 189;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 194;4; 0.000000,-0.000000, 1.000000, 0.000000;;, + 199;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 200;4; 0.000000, 0.000000, 1.000000, 0.000000;;, + 205;4; -0.043620, 0.000000,-0.999048,-0.000000;;, + 210;4; 0.000000,-0.000000, 1.000000, 0.000000;;, + 215;4; -0.043619,-0.000000, 0.999048, 0.000000;;, + 220;4; 0.000000, 0.000000, 1.000000, 0.000000;;; + } + AnimationKey { //Scale + 1; + 1; + 0;3; 1.000000, 1.000000, 1.000000;;; + } + } + Animation { + {Armature_Arm_Left} + AnimationKey { //Position + 2; + 1; + 0;3; -2.000000, 6.750000,-0.000000;;; + } + AnimationKey { //Rotation + 0; + 25; + 0;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 20;4; -0.039285, 0.996202,-0.071502,-0.030419;;, + 40;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 60;4; -0.039285, 0.996202,-0.071502,-0.030419;;, + 80;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 81;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 101;4; -0.039285, 0.996202,-0.071502,-0.030419;;, + 121;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 141;4; -0.039285, 0.996202,-0.071502,-0.030419;;, + 161;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 162;4; -0.003932,-0.958043, 0.286296, 0.013157;;, + 167;4; -0.003932,-0.958043, 0.286296, 0.013157;;, + 168;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 173;4; -0.298147,-0.951060, 0.061513, 0.053011;;, + 178;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 183;4; -0.296346, 0.952156,-0.069674, 0.026885;;, + 188;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 189;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 194;4; -0.086112,-0.993248, 0.070708, 0.032302;;, + 199;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 200;4; -0.000993,-0.997299, 0.072152, 0.013690;;, + 205;4; -0.298147,-0.951060, 0.061513, 0.053011;;, + 210;4; -0.000993,-0.997299, 0.072153, 0.013687;;, + 215;4; -0.296346, 0.952156,-0.069674, 0.026885;;, + 220;4; -0.000993,-0.997299, 0.072152, 0.013690;;; + } + AnimationKey { //Scale + 1; + 1; + 0;3; 1.000000, 1.000000, 1.000000;;; + } + } + Animation { + {Armature_Arm_Right} + AnimationKey { //Position + 2; + 1; + 0;3; 2.000000, 6.750000,-0.000000;;; + } + AnimationKey { //Rotation + 0; + 25; + 0;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 20;4; -0.039285, 0.996202, 0.071502, 0.030419;;, + 40;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 60;4; -0.039285, 0.996202, 0.071502, 0.030419;;, + 80;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 81;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 101;4; -0.039285, 0.996202, 0.071502, 0.030419;;, + 121;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 141;4; -0.039285, 0.996202, 0.071502, 0.030419;;, + 161;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 162;4; -0.003932,-0.958043,-0.286296,-0.013157;;, + 167;4; -0.003932,-0.958043,-0.286296,-0.013157;;, + 168;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 173;4; -0.296346, 0.952156, 0.069674,-0.026885;;, + 178;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 183;4; -0.298147,-0.951060,-0.061513,-0.053011;;, + 188;4; -0.000993,-0.997299,-0.072152,-0.013690;;, + 189;4; -0.835222,-0.536095, 0.025763,-0.119765;;, + 194;4; -0.506107,-0.862012,-0.018302,-0.021341;;, + 199;4; -0.835222,-0.536095, 0.025763,-0.119765;;, + 200;4; -0.538719,-0.840704,-0.006525,-0.054376;;, + 205;4; -0.835222,-0.536095, 0.025763,-0.119765;;, + 210;4; -0.506107,-0.862012,-0.018302,-0.021341;;, + 215;4; -0.835222,-0.536095, 0.025763,-0.119765;;, + 220;4; -0.538719,-0.840704,-0.006525,-0.054376;;; + } + AnimationKey { //Scale + 1; + 1; + 0;3; 1.000000, 1.000000, 1.000000;;; + } + } + Animation { + {Armature_Leg_Right} + AnimationKey { //Position + 2; + 1; + 0;3; 1.000000, 0.000000,-0.000001;;; + } + AnimationKey { //Rotation + 0; + 25; + 0;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 20;4; -0.043619, 0.999048,-0.000000,-0.000000;;, + 40;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 60;4; -0.043619, 0.999048,-0.000000,-0.000000;;, + 80;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 81;4; -0.707107,-0.707107,-0.000000, 0.000000;;, + 101;4; -0.675590,-0.737277,-0.000000, 0.000000;;, + 121;4; -0.707107,-0.707107,-0.000000, 0.000000;;, + 141;4; -0.675590,-0.737277,-0.000000, 0.000000;;, + 161;4; -0.707107,-0.707107,-0.000000, 0.000000;;, + 162;4; -0.000000, 0.991445, 0.130526,-0.000000;;, + 167;4; -0.000000, 0.991445, 0.130526,-0.000000;;, + 168;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 173;4; -0.382684,-0.923880,-0.000000, 0.000000;;, + 178;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 183;4; -0.382683, 0.923880,-0.000000,-0.000000;;, + 188;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 189;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 194;4; -0.043620,-0.999048,-0.000000, 0.000000;;, + 199;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 200;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 205;4; -0.382684,-0.923880,-0.000000, 0.000000;;, + 210;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 215;4; -0.382683, 0.923880,-0.000000,-0.000000;;, + 220;4; -0.000000, 1.000000,-0.000000,-0.000000;;; + } + AnimationKey { //Scale + 1; + 1; + 0;3; 1.000000, 1.000000, 1.000000;;; + } + } + Animation { + {Armature_Leg_Left} + AnimationKey { //Position + 2; + 1; + 0;3; -1.000000, 0.000000,-0.000001;;; + } + AnimationKey { //Rotation + 0; + 25; + 0;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 20;4; -0.043619, 0.999048,-0.000000,-0.000000;;, + 40;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 60;4; -0.043619, 0.999048,-0.000000,-0.000000;;, + 80;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 81;4; -0.707107,-0.707107,-0.000000, 0.000000;;, + 101;4; -0.675590,-0.737277,-0.000000, 0.000000;;, + 121;4; -0.707107,-0.707107,-0.000000, 0.000000;;, + 141;4; -0.675590,-0.737277,-0.000000, 0.000000;;, + 161;4; -0.707107,-0.707107,-0.000000, 0.000000;;, + 162;4; -0.000000, 0.991445,-0.130526,-0.000000;;, + 167;4; -0.000000, 0.991445,-0.130526,-0.000000;;, + 168;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 173;4; -0.382683, 0.923880,-0.000000,-0.000000;;, + 178;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 183;4; -0.382684,-0.923880,-0.000000, 0.000000;;, + 188;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 189;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 194;4; -0.043620,-0.999048,-0.000000, 0.000000;;, + 199;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 200;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 205;4; -0.382683, 0.923880,-0.000000,-0.000000;;, + 210;4; -0.000000, 1.000000,-0.000000,-0.000000;;, + 215;4; -0.382684,-0.923880,-0.000000, 0.000000;;, + 220;4; -0.000000, 1.000000,-0.000000,-0.000000;;; + } + AnimationKey { //Scale + 1; + 1; + 0;3; 1.000000, 1.000000, 1.000000;;; + } + } +} //End of AnimationSet diff --git a/textures/people_character.png b/textures/people_character.png new file mode 100644 index 0000000000000000000000000000000000000000..d794b870686d59ef6115f9c7122163f3e5f3ecf5 GIT binary patch literal 3223 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 JPDHLkV1l3m5>@~J literal 0 HcmV?d00001 diff --git a/tracking.lua b/tracking.lua new file mode 100644 index 0000000..3e2fc60 --- /dev/null +++ b/tracking.lua @@ -0,0 +1,115 @@ + +local dbg +if moddebug then dbg=moddebug.dbg("people") else dbg={v1=function() end,v2=function() end,v3=function() end} end + +-- This table tracks all the people in the world. It's keyed on the person +-- name, and each entry is a table keyed as follows: +-- entity - the active luaentity reference, or nil if not active +-- pos - when inactive, the entity's position +-- waketime - time in seconds until this entity should be re-awoken, +-- or nil (only ever set when inactive) +-- waking - used internally to track wakeup status +-- dead - used internally to track when dead +-- Changes to this should be via the functions below. +people.people = {} +local file = io.open(minetest.get_worldpath().."/people_people", "r") +if file then + people.people = minetest.deserialize(file:read("*all")) + file:close() +end + +local people_save = function() + -- We save without the entity field, because all will be inactive + -- when reloaded + local speople = {} + for k, v in pairs(people.people) do + speople[k] = { + pos = v.pos, + waketime = v.waketime, + } + end + local file = io.open(minetest.get_worldpath().."/people_people", "w") + if file then + file:write(minetest.serialize(speople)) + file:close() + end +end + + +people.people_add = function(entity) + people.people[entity.name] = {entity=entity} + dbg.v2(entity.name.." added") +end + +people.people_set_active = function(entity) + local pr = people.people[entity.name] + if not pr then + -- Should never happen + dbg.v1(entity.name.." reactivated without existing record") + pr = {} + people.people[entity.name] = pr + end + pr.entity = entity + if pr.waketime then + local loadpos = pr.pos + if not loadpos then + dbg.v1("Activated entity has waketime but no pos") + else + dbg.v2("Free forceload for "..minetest.pos_to_string(loadpos)) + minetest.forceload_free_block(loadpos) + end + pr.pos = nil + pr.waketime = nil + pr.waking = nil + end + dbg.v2(entity.name.." activated") +end + +people.people_set_inactive = function(entity) + if not people.people[entity.name] then + dbg.v1("people_set_inactive for "..entity.name or nil.." with no people record") + return + end + if people.people[entity.name].dead then + people.people[entity.name] = nil + dbg.v2(entity.name.." deactivated forever") + else + people.people[entity.name].entity = nil + people.people[entity.name].pos = entity.object:getpos() + if entity.wait == 0 then + people.people[entity.name].waketime = minetest.get_gametime() + 1 + else + people.people[entity.name].waketime = entity.wait + end + dbg.v2(entity.name.." deactivated") + end + people_save() +end + + +--- Called at regular intervals +-- Handles waking entities that are unloaded and shouldn't be any more. +-- Once a second is probably about right, although more frequently wouldn't +-- hurt. +people.people_wake = function() + + for k, v in pairs(people.people) do + if v.waketime and v.waketime <= minetest.get_gametime() and not v.waking then + + -- Need to flag that we're doing it, because there will be a + -- delay before the block is actually loaded. + v.waking = true + + -- Wake the entity by (yuk) setting a forceload. The activation + -- of the entity will cause the forceload to be freed. + dbg.v2("Set forceload for "..minetest.pos_to_string(v.pos)) + minetest.forceload_block(v.pos) + + -- Only one at a time, even though this will introduce some + -- inaccuracy as to when they actually wake + break + end + end + +end +