Pos Lua >> Moon 2 1:[ local util = require("util") ] >> 2:[ util = require "util" ] 24 2:[ local broadphase = require("broadphase") ] >> 3:[ broadphase = require "broadphase" ] 58 3:[ local main = require("main") ] >> 4:[ main = require "main" ] 80 4:[ local constrain = require("constrain") ] >> 5:[ constrain = require "constrain" ] 112 5:[ local color = require("color") ] >> 6:[ color = require "color" ] 136 6:[ local room = require("room") ] >> 7:[ room = require "room" ] 179 8:[ LobbyRoom = room.LobbyRoom ] >> 8:[ import LobbyRoom from room ] 185 9:[ local ability_reg = require("ability_reg") ] >> 9:[ ability_reg = require "ability_reg" ] 223 10:[ local mod = ... ] >> 12:[ mod = ... ] 233 11:[ mod.characters = { } ] >> 13:[ mod.characters = {} ] 253 12:[ mod.classes = { } ] >> 14:[ mod.classes = {} ] 270 13:[ require("char_tank") ] >> 15:[ require "char_tank" ] 290 14:[ require("char_mage") ] >> 16:[ require "char_mage" ] 310 15:[ require("char_theif") ] >> 17:[ require "char_theif" ] 331 16:[ require("char_fool") ] >> 18:[ require "char_fool" ] 351 17:[ require("char_jugg") ] >> 19:[ require "char_jugg" ] 371 18:[ mod.class_order = { ] >> 20:[ mod.class_order = { ] 392 19:[ "Tumbler", ] >> 21:[ "Tumbler", ] 404 20:[ "Fire Breather", ] >> 22:[ "Fire Breather", ] 422 21:[ "Juggler", ] >> 23:[ "Juggler", ] 434 22:[ "Troubador", ] >> 24:[ "Troubador", ] 448 23:[ "Juggernaut" ] >> 25:[ "Juggernaut" ] 371 24:[ } ] >> 20:[ mod.class_order = { ] 463 25:[ mod.class_order_rev = { } ] >> 27:[ mod.class_order_rev = {} ] 498 26:[ for k, v in ipairs(mod.class_order) do ] >> 28:[ for k,v in ipairs(mod.class_order) ] 524 27:[ mod.class_order_rev[v] = k ] >> 29:[ mod.class_order_rev[v] = k ] 488 28:[ end ] >> 28:[ for k,v in ipairs(mod.class_order) ] 551 29:[ print("After requireing characters, mod.classes was", mod.classes) ] >> 30:[ print("After requireing characters, mod.classes was",mod.classes) ] 617 30:[ mod.enemies = { } ] >> 31:[ mod.enemies = {} ] 652 31:[ require("e_bethany") ] >> 33:[ require "e_bethany" ] 672 32:[ require("e_ruminating_randy") ] >> 34:[ require "e_ruminating_randy" ] 701 33:[ require("e_mopey_marvin") ] >> 35:[ require "e_mopey_marvin" ] 726 34:[ require("e_sullen_salley") ] >> 36:[ require "e_sullen_salley" ] 752 35:[ require("e_child") ] >> 37:[ require "e_child" ] 770 36:[ print("After requireing rat, mod.enemies was", mod.enemies) ] >> 38:[ print("After requireing rat, mod.enemies was",mod.enemies) ] 928 45:[ key = "" ] >> 42:[ new:(key = "") => ] 945 47:[ self.time = 0 ] >> 43:[ @time = 0 ] 957 48:[ self.key = key ] >> 44:[ @key = key ] 970 49:[ self.value = false ] >> 45:[ @value = false ] 1049 71:[ self.anim = anim ] >> 51:[ @anim = anim ] 1064 72:[ self.interupt = interupt ] >> 52:[ @interupt = interupt ] 1087 73:[ self.mode = mode ] >> 53:[ @mode = mode ] 1133 96:[ action = "" ] >> 56:[ new:(action = "") => ] 1150 98:[ self.time = 0 ] >> 57:[ @time = 0 ] 1162 99:[ self.action = action ] >> 58:[ @action = action ] 1180 114:[ mod.sprite_direction_co = function(self) ] >> 60:[ mod.sprite_direction_co = () => ] 1213 115:[ return function() ] >> 61:[ return () -> ] 1233 116:[ while true do ] >> 62:[ while true ] 1242 117:[ self:stop_anim(self.sprites.right) ] >> 63:[ @stop_anim(@sprites.right) ] 1272 118:[ self:stop_anim(self.sprites.left) ] >> 64:[ @stop_anim(@sprites.left) ] 1301 119:[ self:stop_anim(self.sprites.stop_right) ] >> 65:[ @stop_anim(@sprites.stop_right) ] 1336 120:[ self:stop_anim(self.sprites.stop_left) ] >> 66:[ @stop_anim(@sprites.stop_left) ] 1370 121:[ self:stop_anim(self.sprites.falling_left) ] >> 67:[ @stop_anim(@sprites.falling_left) ] 1407 122:[ self:stop_anim(self.sprites.falling_right) ] >> 68:[ @stop_anim(@sprites.falling_right) ] 1459 123:[ local _list_0 = self.inputs ] >> 69:[ for input in *@inputs ] 1473 126:[ if self.velocity.x > 0.01 then ] >> 70:[ if @velocity.x > 0.01 ] 1498 127:[ self:set_anim(self.sprites.right, 1, "loop") ] >> 71:[ @set_anim(@sprites.right,1,"loop") ] 1554 129:[ elseif self.velocity.x < -0.01 then ] >> 73:[ elseif @velocity.x < -0.01 ] 1580 130:[ self:set_anim(self.sprites.left, 1, "loop") ] >> 74:[ @set_anim(@sprites.left,1,"loop") ] 1628 134:[ coroutine.yield() ] >> 76:[ coroutine.yield! ] 1228 135:[ end ] >> 62:[ while true ] 1213 136:[ end ] >> 61:[ return () -> ] 1180 137:[ end ] >> 60:[ mod.sprite_direction_co = () => ] 1646 138:[ mod.can_die_co = function(self) ] >> 78:[ mod.can_die_co = () => ] 1670 139:[ return function() ] >> 79:[ return () -> ] 1690 140:[ while not self.dead do ] >> 80:[ while not @dead ] 1704 141:[ coroutine.yield() ] >> 81:[ coroutine.yield! ] 1685 142:[ end ] >> 80:[ while not @dead ] 1734 143:[ for k, v in pairs(self.sprites) do ] >> 83:[ for k,v in pairs @sprites ] 1755 144:[ if k ~= "idle" then ] >> 84:[ if k ~= "idle" ] 1772 145:[ self:stop_anim(v) ] >> 85:[ @stop_anim(v) ] 1753 146:[ end ] >> 84:[ if k ~= "idle" ] 1724 147:[ end ] >> 83:[ for k,v in pairs @sprites ] 1790 148:[ if self.sprites.die then ] >> 86:[ if @sprites.die ] 1807 149:[ self:set_anim(self.sprites.die, 5) ] >> 87:[ @set_anim(@sprites.die,5) ] 1788 150:[ end ] >> 86:[ if @sprites.die ] 1835 151:[ return coroutine.yield(true) ] >> 88:[ coroutine.yield(true) ] 1670 152:[ end ] >> 79:[ return () -> ] 1646 153:[ end ] >> 78:[ mod.can_die_co = () => ] 1858 154:[ mod.make_animate = function(c) ] >> 90:[ mod.make_animate = (c) -> ] 1885 155:[ assertf(c.sprites ~= nil, "Tried to animate something that had no .sprites: %q", c.__class.__name) ] >> 91:[ assertf(c.sprites ~= nil, "Tried to animate something that had no .sprites: %q", c.__class.__name) ] 1985 156:[ assertf(c.sprites.idle ~= nil and #c.sprites.idle > 0, "Tried to animate something without a .idle animation: %q", c.__class.__name) ] >> 92:[ assertf(c.sprites.idle ~= nil and #c.sprites.idle > 0, "Tried to animate something without a .idle animation: %q", c.__class.__name) ] 2119 157:[ c.anim_stack = { ] >> 93:[ c.anim_stack = {AnimFrame(c.sprites.idle,0,"loop")} ] 2135 158:[ AnimFrame(c.sprites.idle, 0, "loop") ] >> 93:[ c.anim_stack = {AnimFrame(c.sprites.idle,0,"loop")} ] 2119 159:[ } ] >> 93:[ c.anim_stack = {AnimFrame(c.sprites.idle,0,"loop")} ] 2172 160:[ c.anim = c.sprites.idle ] >> 94:[ c.anim = c.sprites.idle ] 2197 161:[ c.keyframe = 0 ] >> 95:[ c.keyframe = 0 ] 2213 162:[ c.animrate = c.animrate or 1 ] >> 96:[ c.animrate = c.animrate or 1 ] 2243 163:[ c.anim_interupt = 0 ] >> 97:[ c.anim_interupt = 0 ] 2264 164:[ c.set_anim = function(self, tbl, interupt, mode) ] >> 98:[ c.set_anim = (self,tbl,interupt,mode) -> ] 2309 165:[ if type(tbl) ~= "table" then ] >> 99:[ if type(tbl) ~= "table" ] 2334 166:[ error("Tried to set anim to something that was not a table!", 2) ] >> 100:[ error("Tried to set anim to something that was not a table!",2) ] 2307 167:[ end ] >> 99:[ if type(tbl) ~= "table" ] 2402 168:[ if #tbl == 0 then ] >> 101:[ if #tbl == 0 ] 2416 169:[ error("Tried to set anim to an empty table", 2) ] >> 102:[ error("Tried to set anim to an empty table",2) ] 2400 170:[ end ] >> 101:[ if #tbl == 0 ] 2467 171:[ if interupt > self.anim_interupt then ] >> 103:[ if interupt > @anim_interupt ] 2497 172:[ table.insert(self.anim_stack, AnimFrame(tbl, interupt, mode)) ] >> 104:[ table.insert(@anim_stack,AnimFrame(tbl,interupt,mode)) ] 2555 173:[ self.anim = self.anim_stack[#self.anim_stack].anim ] >> 105:[ @anim = @anim_stack[#@anim_stack].anim ] 2597 174:[ self.anim_interupt = interupt ] >> 106:[ @anim_interupt = interupt ] 2465 175:[ end ] >> 103:[ if interupt > @anim_interupt ] 2264 176:[ end ] >> 98:[ c.set_anim = (self,tbl,interupt,mode) -> ] 2625 177:[ c.stop_anim = function(self, tbl, err_if_unable) ] >> 108:[ c.stop_anim = (self,tbl,err_if_unable=false) -> ] 2663 179:[ err_if_unable = false ] >> 108:[ c.stop_anim = (self,tbl,err_if_unable=false) -> ] 2675 181:[ local anim_found = false ] >> 109:[ anim_found = false ] 2706 182:[ for k, v in pairs(self.anim_stack) do ] >> 110:[ for k,v in pairs @anim_stack ] 2730 183:[ if v.anim == tbl then ] >> 111:[ if v.anim == tbl ] 2785 184:[ anim_found = true ] >> 113:[ anim_found = true ] 2807 185:[ table.remove(self.anim_stack, k) ] >> 114:[ table.remove(@anim_stack,k) ] 2728 187:[ end ] >> 111:[ if v.anim == tbl ] 2696 188:[ end ] >> 110:[ for k,v in pairs @anim_stack ] 2849 189:[ if err_if_unable then ] >> 116:[ if err_if_unable ] 2867 190:[ assertf(anim_found, "Could not find animation to remove") ] >> 117:[ assertf(anim_found, "Could not find animation to remove") ] 2847 191:[ end ] >> 116:[ if err_if_unable ] 2927 192:[ self.anim = self.anim_stack[#self.anim_stack].anim ] >> 118:[ @anim = @anim_stack[#@anim_stack].anim ] 2968 193:[ self.anim_interupt = self.anim_stack[#self.anim_stack].interupt ] >> 119:[ @anim_interupt = @anim_stack[#@anim_stack].interupt ] 2625 194:[ end ] >> 108:[ c.stop_anim = (self,tbl,err_if_unable=false) -> ] 3022 195:[ return c.node:action(coroutine.create(function() ] >> 121:[ c.node\action(coroutine.create(() -> ] 3066 196:[ while not c.dead do ] >> 122:[ while not c.dead ] 3081 197:[ c.keyframe = math.floor(am.current_time() * c.animrate) % #c.anim ] >> 123:[ c.keyframe = math.floor(am.current_time()*c.animrate) % #c.anim ] 3148 198:[ local spritename = c.anim[c.keyframe + 1] ] >> 124:[ spritename = c.anim[c.keyframe + 1] ] 3187 199:[ assert(spritename, "Failed to find an appropriate image to draw.") ] >> 125:[ assert(spritename, "Failed to find an appropriate image to draw.") ] 3291 200:[ c.node("sprite").source = spritename ] >> 127:[ c.node("sprite").source = spritename ] 3331 201:[ coroutine.yield() ] >> 128:[ coroutine.yield! ] 3061 202:[ end ] >> 122:[ while not c.dead ] 3366 203:[ local keyframe_0 = am.current_time() ] >> 130:[ keyframe_0 = am.current_time() ] 3404 204:[ while c.keyframe < #c.anim - 1 do ] >> 131:[ while c.keyframe < #c.anim - 1 ] 3433 205:[ c.keyframe = math.floor((am.current_time() - keyframe_0) * c.animrate) ] >> 132:[ c.keyframe = math.floor((am.current_time! - keyframe_0)*c.animrate) ] 3504 206:[ assert(c.anim[c.keyframe + 1], "Failed to find an appropriate image to draw.") ] >> 133:[ assert(c.anim[c.keyframe + 1], "Failed to find an appropriate image to draw.") ] 3586 207:[ c.node("sprite").source = c.anim[c.keyframe + 1] ] >> 134:[ c.node("sprite").source = c.anim[c.keyframe + 1] ] 3638 208:[ coroutine.yield() ] >> 135:[ coroutine.yield! ] 3399 209:[ end ] >> 131:[ while c.keyframe < #c.anim - 1 ] 3657 210:[ c:remove() ] >> 136:[ c\remove() ] 3670 211:[ return coroutine.yield(true) ] >> 137:[ coroutine.yield(true) ] 3022 212:[ end)) ] >> 121:[ c.node\action(coroutine.create(() -> ] 1858 213:[ end ] >> 90:[ mod.make_animate = (c) -> ] 3697 214:[ mod.inherited = { } ] >> 140:[ mod.inherited = {} ] 3716 215:[ local hp_bar_width = 20 ] >> 141:[ hp_bar_width = 20 ] 5899 221:[ return string.format("<%s, %s> at (%d)", self.__class.__name, (self.class and self.class.name or "no class"), (self.data and self.data.position or -1)) ] >> 187:[ return string.format( ] 6264 224:[ for k, v in pairs(self.class) do ] >> 201:[ for k,v in pairs(@class) ] 6284 225:[ if k:match("^default") then ] >> 202:[ if k\match("^default") ] 6309 226:[ local field = k:match("^default_(.*)") ] >> 203:[ field = k\match("^default_(.*)") ] 6348 227:[ if type(v) == "function" then ] >> 204:[ if type(v) == "function" ] 6376 228:[ self.data[field] = v() ] >> 205:[ @data[field] = v! ] 6408 230:[ self.data[field] = v ] >> 207:[ @data[field] = v ] 6282 232:[ end ] >> 202:[ if k\match("^default") ] 6254 233:[ end ] >> 201:[ for k,v in pairs(@class) ] 6457 236:[ assert(self.data[name], "Field must exist to be set") ] >> 210:[ assert(@data[name], "Field must exist to be set") ] 6509 237:[ self.data[name] = value ] >> 211:[ @data[name] = value ] 6531 238:[ print("my data table is:", self.data) ] >> 212:[ print("my data table is:",@data) ] 6568 239:[ if name == "hp" then ] >> 213:[ if name == "hp" ] 6585 240:[ local perc = (self.data.hp / self.data.maxhp) * 20 ] >> 214:[ perc = (@data.hp / @data.maxhp) * 20 ] 6625 241:[ self.node("hp_fill_scale").x = perc ] >> 215:[ @.node("hp_fill_scale").x = perc ] 6566 242:[ end ] >> 213:[ if name == "hp" ] 6679 245:[ print("Serializing char:", self) ] >> 218:[ print("Serializing char:",@) ] 6710 246:[ print("Name:", self.__class.__name) ] >> 219:[ print("Name:", @@__name) ] 6737 247:[ print("uname:", self.uname) ] >> 220:[ print("uname:",@uname) ] 6762 248:[ print("data:", self.data) ] >> 221:[ print("data:",@data) ] 6785 249:[ local data_abilities = { } ] >> 222:[ data_abilities = {} ] 6823 250:[ for i, ability in pairs(self.data.abilities) do ] >> 223:[ for i,ability in pairs(@data.abilities) ] 6850 251:[ data_abilities[i] = ability.__name ] >> 224:[ data_abilities[i] = ability.__name ] 6807 252:[ end ] >> 223:[ for i,ability in pairs(@data.abilities) ] 6887 253:[ local data_copy = table.shallow_copy(self.data) ] >> 225:[ data_copy = table.shallow_copy(@data) ] 6927 254:[ data_copy.abilities = data_abilities ] >> 226:[ data_copy.abilities = data_abilities ] 6966 255:[ print("class.name:", self.class.name) ] >> 227:[ print("class.name:",@class.name) ] 7001 256:[ local ret = am.to_json({ ] >> 228:[ ret = am.to_json({name:@@__name, uname:@uname, data:data_copy, class:@class.name}) ] 7024 257:[ name = self.__class.__name, ] >> 228:[ ret = am.to_json({name:@@__name, uname:@uname, data:data_copy, class:@class.name}) ] 7040 258:[ uname = self.uname, ] >> 228:[ ret = am.to_json({name:@@__name, uname:@uname, data:data_copy, class:@class.name}) ] 7053 259:[ data = data_copy, ] >> 228:[ ret = am.to_json({name:@@__name, uname:@uname, data:data_copy, class:@class.name}) ] 7070 260:[ class = self.class.name ] >> 228:[ ret = am.to_json({name:@@__name, uname:@uname, data:data_copy, class:@class.name}) ] 7001 261:[ }) ] >> 228:[ ret = am.to_json({name:@@__name, uname:@uname, data:data_copy, class:@class.name}) ] 7086 262:[ print("Ret is:", ret) ] >> 229:[ print("Ret is:",ret) ] 7109 263:[ return ret ] >> 230:[ ret ] 7141 266:[ print("Deserializing character") ] >> 233:[ print("Deserializing character") ] 7176 267:[ local tbl = am.parse_json(data) ] >> 234:[ tbl = am.parse_json(data) ] 7206 268:[ if mod.classes[tbl.class] then ] >> 235:[ if mod.classes[tbl.class] ] 7233 269:[ local data_abilities = { } ] >> 236:[ data_abilities = {} ] 7278 270:[ for i, ability_name in pairs(tbl.data.abilities) do ] >> 237:[ for i, ability_name in pairs(tbl.data.abilities) ] 7309 271:[ data_abilities[i] = ability_reg[ability_name] ] >> 238:[ data_abilities[i] = ability_reg[ability_name] ] 7256 272:[ end ] >> 237:[ for i, ability_name in pairs(tbl.data.abilities) ] 7358 273:[ tbl.data.abilities = data_abilities ] >> 239:[ tbl.data.abilities = data_abilities ] 7397 274:[ return mod.inherited[tbl.name](tbl.uname, tbl.data, mod.classes[tbl.class]) ] >> 240:[ return mod.inherited[tbl.name](tbl.uname, tbl.data, mod.classes[tbl.class]) ] 7481 275:[ elseif mod.enemies[tbl.class] then ] >> 241:[ elseif mod.enemies[tbl.class] ] 7508 276:[ local e = mod.Enemy(tbl.data, mod.enemies[tbl.class]) ] >> 242:[ e = mod.Enemy(tbl.data, mod.enemies[tbl.class]) ] 7559 277:[ e.uname = tbl.uname ] >> 243:[ e.uname = tbl.uname ] 7582 278:[ return e ] >> 244:[ return e ] 7616 282:[ return print("draw") ] >> 248:[ print("draw") ] 7647 285:[ return self.node:remove_all() ] >> 250:[ @node\remove_all! ] 7679 288:[ self.dead = true ] >> 252:[ @dead = true ] 7694 289:[ print(self, "is dieing, node is", self.node, "and color is", color) ] >> 253:[ print(@,"is dieing, node is",@.node,"and color is",color) ] 7754 290:[ self.node("char_sprite"):append(am.line(vec2(-10, -10), vec2(10, 10), 5, color.bright)) ] >> 254:[ @.node("char_sprite")\append(am.line(vec2(-10,-10),vec2(10,10),5,color.bright)) ] 7836 291:[ return self.node("char_sprite"):append(am.line(vec2(10, -10), vec2(-10, 10), 5, color.bright)) ] >> 255:[ @.node("char_sprite")\append(am.line(vec2(10,-10),vec2(-10,10),5,color.bright)) ] 7941 294:[ self.room = room ] >> 257:[ @room = room ] 7956 295:[ print("Character", self, "entered room", room) ] >> 258:[ print("Character",@,"entered room",room) ] 7999 296:[ self.node("char_translate").y = room.floor_y ] >> 259:[ @.node("char_translate").y = room.floor_y ] 8045 297:[ if room.__class == LobbyRoom then ] >> 260:[ if room.__class == LobbyRoom ] 8075 298:[ print("Class was lobbyRoom") ] >> 261:[ print("Class was lobbyRoom") ] 8107 299:[ local rng_x = math.random(-(main.width / 2), (main.width / 2)) ] >> 262:[ rng_x = math.random(-(main.width/2), (main.width/2)) ] 8163 300:[ print("RNG x:", rng_x) ] >> 263:[ print("RNG x:",rng_x) ] 8188 301:[ self.node("char_translate").x = rng_x ] >> 264:[ @.node("char_translate").x = rng_x ] 8233 303:[ print("Class was not LobbyRoom") ] >> 266:[ print("Class was not LobbyRoom") ] 8269 304:[ local x_pos = self.room:player_location_of(self.data.position) ] >> 267:[ x_pos = @room\player_location_of(@data.position) ] 8321 305:[ print("Got x pos for", self, x_pos) ] >> 268:[ print("Got x pos for",@,x_pos) ] 8355 306:[ self.node("char_translate").x = x_pos + math.random(-15, 15) ] >> 269:[ @.node("char_translate").x = x_pos + math.random(-15,15) --some random variance to stop stacking ] 8480 310:[ assert(newclass, "Cannot set a class to nil") ] >> 271:[ assert(newclass, "Cannot set a class to nil") ] 8528 311:[ self.class = newclass ] >> 272:[ @class = newclass ] 8548 312:[ self:calc_class_values() ] >> 273:[ @calc_class_values! ] 8570 313:[ self.node("char_sprite").source = newclass.sprite ] >> 274:[ @.node("char_sprite").source = newclass.sprite ] 8645 316:[ self.data.position = pos ] >> 277:[ @data.position = pos ] 8694 319:[ self.data.location = loc ] >> 280:[ @data.location = loc ] 3916 325:[ assert(charclass, "Charclass may not be nil") ] >> 147:[ assert(charclass, "Charclass may not be nil") ] 3964 326:[ self.uname = uname or false ] >> 148:[ @uname = uname or false ] 3990 327:[ self.data = data or { ] >> 149:[ @data = data or { ] 4018 328:[ status = "active", ] >> 150:[ status: "active", ] 4041 329:[ location = -1, ] >> 151:[ location: -1, ] 4058 330:[ position = charclass.default_position ] >> 152:[ position: charclass.default_position ] 3990 331:[ } ] >> 149:[ @data = data or { ] 4092 332:[ self.class = charclass ] >> 154:[ @class = charclass ] 4113 333:[ assert(self.class.name, "Character classes must have a name") ] >> 155:[ assert(@class.name, "Character classes must have a name") ] 4173 334:[ self:calc_class_values() ] >> 156:[ @calc_class_values! ] 4195 335:[ self.node = am.group() ] >> 157:[ @node = am.group! ] 4270 336:[ self.node:append(am.translate(0, 0):tag("char_translate") ^ am.sprite(self.class.sprite, color.white, "center", "bottom"):tag("char_sprite")) ] >> 160:[ @node\append(am.translate(0,0)\tag("char_translate")^ am.sprite(@class.sprite,color.white,"center","bottom")\tag("char_sprite")) ] 4401 337:[ print("A character has been created!") ] >> 161:[ print("A character has been created!") ] 4442 338:[ print(debug.traceback()) ] >> 162:[ print(debug.traceback!) ] 4487 339:[ local healthbar_trans = am.translate(0, 60) ] >> 164:[ healthbar_trans = am.translate(0,60) ] 4526 340:[ local healthbar_left = am.sprite("data/bar_left.png", color.white, "left", "center"):tag("hp_l") ] >> 165:[ healthbar_left = am.sprite("data/bar_left.png", color.white,"left","center")\tag("hp_l") ] 4617 341:[ local healthbar_right = am.sprite("data/bar_right.png", color.white, "right", "center"):tag("hp_r") ] >> 166:[ healthbar_right = am.sprite("data/bar_right.png", color.white, "right","center")\tag("hp_r") ] 4712 342:[ local healthbar_bar = am.sprite("data/bar_mid.png", color.white, "left", "center"):tag("hp_b") ] >> 167:[ healthbar_bar = am.sprite("data/bar_mid.png", color.white,"left","center")\tag("hp_b") ] 4801 343:[ local healthbar_fill = am.sprite("data/bar_fill.png", color.white, "left", "center"):tag("hp_f") ] >> 168:[ healthbar_fill = am.sprite("data/bar_fill.png", color.white,"left","center")\tag("hp_f") ] 4892 344:[ local healthbar_scale = am.scale(hp_bar_width, 1) ] >> 169:[ healthbar_scale = am.scale(hp_bar_width,1) ] 4937 345:[ local healthbar_fill_scale = am.scale(hp_bar_width + 1, 1):tag("hp_fill_scale") ] >> 170:[ healthbar_fill_scale = am.scale(hp_bar_width + 1,1)\tag("hp_fill_scale") ] 5012 346:[ healthbar_trans:append(am.translate(-hp_bar_width, 0) ^ healthbar_left) ] >> 171:[ healthbar_trans\append(am.translate(-hp_bar_width,0)^ healthbar_left) ] 5084 347:[ healthbar_trans:append(am.translate(hp_bar_width, 0) ^ healthbar_right) ] >> 172:[ healthbar_trans\append(am.translate(hp_bar_width,0)^ healthbar_right) ] 5156 348:[ healthbar_trans:append(am.translate(-hp_bar_width / 2, 0) ^ healthbar_scale ^ healthbar_bar) ] >> 173:[ healthbar_trans\append(am.translate(-hp_bar_width/2,0)^ healthbar_scale^ healthbar_bar) ] 5246 349:[ healthbar_trans:append(am.translate((-hp_bar_width / 2) - 1, 0) ^ healthbar_fill_scale ^ healthbar_fill) ] >> 174:[ healthbar_trans\append(am.translate((-hp_bar_width/2) - 1,0)^ healthbar_fill_scale^ healthbar_fill) ] 5348 350:[ self.node("char_sprite"):append(healthbar_trans) ] >> 175:[ @.node("char_sprite")\append(healthbar_trans) ] 5419 351:[ assert(self.__class.draw, "Characters must have a draw() method") ] >> 177:[ assert(@.__class.draw,"Characters must have a draw() method") ] 5483 352:[ table.insert(mod.characters, self) ] >> 178:[ table.insert(mod.characters,@) ] 5516 353:[ constrain(self, "set anim", function(self, value) ] >> 179:[ constrain(@,"set anim", (self,value) -> ] 5559 354:[ assertf(type(value) == "table", "Tried to set anim on %q to something other than a table (%q)", self, type(value)) ] >> 180:[ assertf(type(value) == "table", "Tried to set anim on %q to something other than a table (%q)",@, type(value)) ] 5673 355:[ return assert(#value > 0, "Tried to set animation for char to something with 0 frames!") ] >> 181:[ assert(#value > 0, "Tried to set animation for char to something with 0 frames!") ] 5516 356:[ end) ] >> 179:[ constrain(@,"set anim", (self,value) -> ] 5761 357:[ return assert(self.__class ~= Character, "Character class must be subclassed") ] >> 183:[ assert(@.__class != Character,"Character class must be subclassed") ] 3809 371:[ self.classes = { } ] >> 144:[ @classes = {} ] 3824 372:[ self.players = { } ] >> 145:[ @players = {} -- players singleton, [peerid] = Character ] 6074 374:[ assert(c, "Inheritance must exist") ] >> 195:[ assert(c, "Inheritance must exist") ] 6112 375:[ assert(c.__name, "Inherited class must have a .__name") ] >> 196:[ assert(c.__name, "Inherited class must have a .__name") ] 6170 376:[ self.__class.classes[c.__name] = c ] >> 197:[ @@.classes[c.__name] = c ] 6197 377:[ mod.inherited[c.__name] = c ] >> 198:[ mod.inherited[c.__name] = c ] 8716 381:[ mod.enemy_counter = 0 ] >> 282:[ mod.enemy_counter = 0 ] 8757 385:[ local _parent_0 = Character ] >> 283:[ class Enemy extends Character ] 8927 388:[ self(data, eclass) ] >> 288:[ @(data, eclass) ] 8946 389:[ mod.enemy_counter = mod.enemy_counter + 1 ] >> 290:[ mod.enemy_counter += 1 ] 8990 392:[ return string.format("<%s> at (%d)", self.uname, self.data.position or 0) ] >> 292:[ return string.format("<%s> at (%d)",@uname, @data.position or 0) ] 9127 395:[ print("Character", self, "entered room", room) ] >> 295:[ print("Character",@,"entered room",room) ] 9170 396:[ self.room = room ] >> 296:[ @room = room ] 9185 397:[ self.node("char_translate").y = self.room.floor_y ] >> 297:[ @.node("char_translate").y = @room.floor_y ] 9230 398:[ self.node("char_translate").x = self.room:enemy_location_of(self.data.position) ] >> 298:[ @.node("char_translate").x = @room\enemy_location_of(@data.position) ] 9325 401:[ return self.class.select_action(self) ] >> 301:[ return @class.select_action(@) ] 8794 408:[ _class_0.__parent.__init(self, eclass.name .. ":" .. tostring(mod.enemy_counter), data, eclass) ] >> 285:[ super(eclass.name .. ":" .. tostring(mod.enemy_counter), data, eclass) ] 8867 409:[ mod.enemy_counter = mod.enemy_counter + 1 ] >> 286:[ mod.enemy_counter += 1 ] 9357 438:[ mod["Character"] = Character ] >> 303:[ mod["Character"] = Character ] 9386 439:[ mod["KeyInput"] = KeyInput ] >> 304:[ mod["KeyInput"] = KeyInput ] 9413 440:[ mod["Enemy"] = Enemy ] >> 305:[ mod["Enemy"] = Enemy ] 9475 441:[ return mod ] >> 307:[ mod ]