actor script

This commit is contained in:
Maddo 2024-04-15 20:07:29 +02:00
commit cb923593aa
3 changed files with 249 additions and 6 deletions

View file

@ -6,7 +6,7 @@ version 2
:: sfx/
:: gfx/0.gfx
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
NC0xNCAyMjowNTo1NiIscmV2aXNpb249MTQzXV1sejQAVQIAAG8zAADzFHtbMF09e2JtcD1weHUA
NC0xNSAxODowNzowMiIscmV2aXNpb249MTU5XV1sejQAVQIAAG8zAADzFHtbMF09e2JtcD1weHUA
QyAQEATw8CxmbGFncz0wLHBhbl94CADKeT0wLHpvb209N30sMQDxCK8bI94DfgPeI94D-gkTbgNO
E24jTgN_EwD-A44DPgNOAy4jfiMuA54D-hQDLl0AHPAJ8EVNgC0mLVAdZh0FIB2GDRUAHZYdFQ2m
BADDDRUADZYdBRC9BfATVwAfMVcAFP8VUESAFE8fFFAPFI8fBEAvFE8fJEAPFB8fRB4EQA8UXg0e
@ -22,7 +22,7 @@ BQAFHAVgBQwFIAUMBXAFQAXwBbIAHg8xAP------------------------------------------
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixzdG9yZWQ9IjIwMjQtMDQt
MDQgMDc6MTk6MzMiXV1sejQABAAAAAMAAAAwbmls
:: main.lua
--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-14 22:05:56",revision=205]]
--[[pod_format="raw",created="2024-04-04 07:19:33",modified="2024-04-15 18:07:02",revision=224]]
--cd("/cirnofarm/src")
include("/cirnofarm/src/cirno.lua")
--function _init()
@ -53,7 +53,7 @@ include("/cirnofarm/src/cirno.lua")
--end
:: map/0.map
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixtb2RpZmllZD0iMjAyNC0w
NC0xNCAyMjowNTo1NiIscmV2aXNpb249MTQ5XV1sejQAowEAANggAADwCHt7Ym1wPXVzZXJkYXRh
NC0xNSAxODowNzowMiIscmV2aXNpb249MTY1XV1sejQAowEAANggAADwCHt7Ym1wPXVzZXJkYXRh
KCJpMTYiLDMyAwAvIjABAP9-LzEwDAADDhAADwEA-w0vMjABAAMvMzBMACEPAQB7HzPcAAYPAQD-
dA8wAh4P0AGcHzL0AEgfMkQAdB8wxAFRD_wAmB8ybAAND-QCyB8zHAAVDyQBOA9IAAEvMjABAGgP
kADQD_gBCR8wXAAuDwEArx8y3AARDxQCrB8yvAECDwEA8w9MAQ0vMzABAP_d8RciKSxoaWRkZW49
@ -67,7 +67,7 @@ b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixzdG9yZWQ9IjIwMjQtMDQt
MDQgMDc6MTk6MzMiXV1sejQABAAAAAMAAAAwbmls
:: sfx/0.sfx
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjM0Iixtb2RpZmllZD0iMjAyNC0w
NC0xNCAyMjowNTo1NiIscmV2aXNpb249MTIwXV1sejQAbAEAAJEIAADwJ3B4dQADKAAAAwAED0AQ
NC0xNSAxODowNzowMiIscmV2aXNpb249MTM2XV1sejQAbAEAAJEIAADwJ3B4dQADKAAAAwAED0AQ
Ag4AAaABIAKgDgAPEAAN8MoBAgMEBQYHAA--kAgJCgsPDA8NDw4PDxAA8AANDxEPEg8TDxQPFQ8W
DxcTAPEBDxgPGQ8aDxsPHA8dDx4PHxQA8QAgDyEPIg8jDyQPJQ8mDycUAPEAKA8pDyoPKw8sDy0P
Lg8vFADxADAPMQ8yDzMPNA81DzYPNxQA-wU4DzkPOg87DzwPPQ8_Dz8AD--w-wEA6-InWgEQBg8g
@ -79,7 +79,7 @@ UP----8f
b64$LS1bW3BvZCxjcmVhdGVkPSIyMDI0LTA0LTA0IDA3OjE5OjMzIixzdG9yZWQ9IjIwMjQtMDQt
MDQgMDc6MTk6MzMiXV1sejQABAAAAAMAAAAwbmls
:: .info.pod
b64$LS1bW3BvZCxydW50aW1lPTUsc3RvcmVkPSIyMDI0LTA0LTE0IDIyOjA1OjU3Iix3b3Jrc3Bh
b64$LS1bW3BvZCxydW50aW1lPTUsc3RvcmVkPSIyMDI0LTA0LTE1IDE4OjA3OjAyIix3b3Jrc3Bh
Y2VzPXt7bG9jYXRpb249Im1haW4ubHVhIzIiLHdvcmtzcGFjZV9pbmRleD0xfSx7bG9jYXRpb249
ImdmeC8wLmdmeCIsd29ya3NwYWNlX2luZGV4PTJ9LHtsb2NhdGlvbj0ibWFwLzAubWFwIix3b3Jr
c3BhY2VfaW5kZXg9M30se2xvY2F0aW9uPSJzZngvMC5zZngiLHdvcmtzcGFjZV9pbmRleD00fX1d

239
src/actor.lua Normal file
View file

@ -0,0 +1,239 @@
type = {top=0, side=1}
MAP_X = 0
MAP_Y = 0
function fmget(x,y,f)
return fget(mget(x+MAP_X,y+MAP_Y),f)
end
function create_spr_col(sprites, flipX, flipY)
local o = {}
o.__index = self
setmetatable(o, self)
o.flipX=flipX or false
o.flipY=flipY or false
o.sprites=sprites
o.draw = function(x, y)
iSrt = 1
iEnd = #o.sprites
iInc = 1
jSrt = 1
jEnd = #o.sprites[1]
jInc = 1
if(o.flipY) then
iSrt = #o.sprites
iEnd = 1
iInc = -1
end
if(o.flipX) then
jSrt = #o.sprites[1]
jEnd = 1
jInc = -1
end
local k=0
for i=iSrt,iEnd,iInc do
local l=0
for j=jSrt,jEnd,jInc do
spr(o.sprites[i][j], x+(l)*8, y+(k)*8, 1, 1, o.flipX, o.flipY)
l+=1
end
k+=1
end
end
return o
end
function create_anim(_spr_cols, delay)
local o = {}
o.__index = self
setmetatable(o, self)
o.flipX=false
o.flipY=false
o.t=1
o.i=1
o.d=delay
o.f=#_spr_cols
o.spr_cols = {}
for i=1,#_spr_cols do
o.spr_cols[i] = create_spr_col(_spr_cols[i])
end
o.draw = function(x, y)
o.spr_cols[o.i].flipX=o.flipX
o.spr_cols[o.i].flipY=o.flipY
o.spr_cols[o.i].draw(x, y)
end
o.update = function()
o.t+=1
if(o.t>=o.d) then
o.t=0
o.i+=1
if(o.i>=o.f) o.i=1
end
end
return o
end
actor = {}
function actor:new(x, y, w, h, flipX, flipY, dx, dy, max_dx, max_dy, max_jumps, acc, boost, grav, fric, cm, cw, slide, _type)
local o = {}
o.__index = self
setmetatable(o, self)
o.x=x
o.y=y
o.w=w
o.h=h
o.flipX=flipX or false
o.flipY=flipY or false
o.dx=dx
o.dy=dy
o.max_dx=max_dx
o.max_dy=max_dy
o.max_jumps=max_jumps
o.acc=acc
o.boost=boost
o.cm=cm
o.cw=cw
o.grav=grav
o.fric=fric
o.slide=slide
o.type=_type
o.cur_anim="idle"
o.air=false
o.last_y=0
o.jumps=0
o.anims={
["idle"]=create_anim({{{0}}},1),
["run"]=create_anim({{{0}}},1),
["jump"]=create_anim({{{0}}},1),
["fall"]=create_anim({{{0}}},1),
["slide"]=create_anim({{{0}}},1),
}
o.chk_cols = function()
local ct=false
local cb=false
if(o.cm) then
local x1=o.x/8
local x2=(o.x+(o.w-1))/8
local y1=o.y/8
local y2=(o.y+(o.h-1))/8
ct=fmget(x1,y1,0) or fmget(x1,y2,0) or fmget(x2,y2,0) or fmget(x2,y1,0)
end
if(o.cw) then
cb=(o.x<0 or o.x+o.w>128 or
o.y<0 or o.y+o.h>128)
end
return ct or cb
end
o.chk_gnd = function()
local x1=flr(o.x/8)
local x2=flr((o.x+(o.w-1))/8)
local y1=flr((o.y+o.h)/8)
return fmget(x1,y1,0) or fmget(x2,y1,0)
end
o.chk_ceil = function()
local x1=flr(o.x/8)
local x2=flr((o.x+(o.w-1))/8)
local y1=flr((o.y-1)/8)
return fmget(x1,y1,0) or fmget(x2,y1,0)
end
o.chk_wall = function(d)
local x1=flr((o.x-1)/8)
local x2=flr((o.x+o.w)/8)
local y1=flr(o.y/8)
local y2=flr((o.y+(o.h-1))/8)
return (d==0 and(fmget(x1,y1,0) or fmget(x1,y2,0))) or (d==1 and (fmget(x2,y2,0) or fmget(x2,y1,0)))
end
o.get_coord=function(lc, c)
local glc=flr(lc/8)
local gc=flr(c/8)
local r=flr(c/8)*8
if (glc>gc) r=flr(c/8)*8+8
if (o.cw and c <= 0) r = 0
if (o.cw and c >= 128) r = 128
return r
end
o.moveX = function(acc)
local lx=o.x
o.dx+=acc
o.dx=mid(-o.max_dx,o.dx,o.max_dx)
o.x+=o.dx
if(o.chk_cols()) then
o.x = o.get_coord(lx, o.x)
end
end
o.moveY = function(boost)
local ly=o.y
o.dy+=boost
if (o.dy>0) then
o.dy=mid(-o.max_dy,o.dy,o.max_dy)
end
o.y+=o.dy
if(o.chk_cols()) then
o.y = o.get_coord(ly, o.y)
end
end
o.jump = function()
o.last_y=o.y
if o.max_jumps == -1 or o.jumps < o.max_jumps then
o.dy=3
o.moveY(-o.boost)
o.air=true
if (o.max_jumps ~= -1) o.jumps+=1
end
end
o.apply_forces = function()
if(o.air and o.max_jumps~=0) then
o.cur_anim="jump"
if(o.last_y<=o.y) o.cur_anim="fall"
o.last_y=o.y
end
if(o.slide and o.air and ((o.chk_wall(0) and btn(0)) or (o.chk_wall(1) and btn(1)))) then
o.cur_anim="slide"
o.dy=0
o.jumps=0
end
if(o.type==type.top) o.dy*=fric
if(o.type==type.side) o.dy+=grav
o.dx*=fric
o.moveX(0)
o.moveY(0)
end
o.add_anim = function(name, spr_cols, d)
o.anims[name]=create_anim(spr_cols, d)
end
o.draw = function()
o.anims[o.cur_anim].draw(o.x, o.y)
end
o.update = function()
o.apply_forces()
if (o.chk_gnd()) then
o.air=false
o.jumps=0
o.dy=0
elseif(o.air==false)then
o.air=true
end
if (o.chk_ceil()) o.dy=0
o.anims[o.cur_anim].flipX=o.flipX
o.anims[o.cur_anim].flipY=o.flipY
o.anims[o.cur_anim].update()
end
return o
end

View file

@ -1,8 +1,12 @@
--[[pod_format="raw",created="2024-04-14 14:05:11",modified="2024-04-14 22:05:51",revision=77]]
--[[pod_format="raw",created="2024-04-14 14:05:11",modified="2024-04-15 17:58:22",revision=94]]
--include("/cirnofarm/src/actor.lua")
mouse_debug = true
w=480
h=300
asdf = {top=0, side=1}
function _init()
player={}
add(player, {
x=128,