142 lines
4.4 KiB
Lua
142 lines
4.4 KiB
Lua
balloon={
|
|
text=nil,
|
|
pos=1,
|
|
ini=1,
|
|
cursor={x=0,y=0},
|
|
old_update=nil,
|
|
rect=nil,
|
|
quick=false,
|
|
|
|
show=function(txt,col,actorname,below,rectangle)
|
|
local actor = actors.search(actorname)
|
|
if not actor then return end
|
|
|
|
if rectangle==nil then
|
|
balloon.rect={x=8,y=actor.y*8-4-game.cam.y,w=144,h=35}
|
|
else
|
|
balloon.rect={}
|
|
balloon.rect.x=rectangle.x*8
|
|
balloon.rect.y=actor.y*8-4-game.cam.y
|
|
balloon.rect.w=rectangle.w*8
|
|
balloon.rect.h=rectangle.h*9+8
|
|
end
|
|
|
|
balloon.text=txt
|
|
balloon.color=col
|
|
balloon.pos=1
|
|
balloon.ini=1
|
|
balloon.obj=nil
|
|
balloon.quick=false
|
|
|
|
balloon.old_update=update
|
|
update=balloon.update
|
|
|
|
local pos=actor.x*8+8-game.cam.x
|
|
|
|
if below==nil or below==false then
|
|
balloon.rect.y=balloon.rect.y-balloon.rect.h-16
|
|
local x,y,w,h=balloon.rect.x,balloon.rect.y,balloon.rect.w,balloon.rect.h
|
|
rectfill(x+1,y+1,x+w+1,y+h+1,5)
|
|
rectfill(x,y,x+w,y+h,8)
|
|
rect(x,y,x+w,y+h,6)
|
|
|
|
if pos<80 then
|
|
for i=0,4 do rect(pos,y+h+(4-i),pos+i,y+h+(4-i),8) end
|
|
line(pos-1,y+h+1,pos-1,y+h+6,6)
|
|
line(pos+4,y+h+1,pos-1,y+h+6,6)
|
|
else
|
|
pos=pos-5
|
|
for i=0,4 do rect(pos+i,y+h+i,pos+4,y+h+i,8) end
|
|
line(pos+5,y+h+1,pos+5,y+h+6,6)
|
|
line(pos,y+h+1,pos+5,y+h+6,6)
|
|
end
|
|
else
|
|
balloon.rect.y=balloon.rect.y+16
|
|
local x,y,w,h=balloon.rect.x,balloon.rect.y,balloon.rect.w,balloon.rect.h
|
|
rectfill(x+1,y+1,x+w+1,y+h+1,5)
|
|
rectfill(x,y,x+w,y+h,8)
|
|
rect(x,y,x+w,y+h,6)
|
|
|
|
if pos<80 then
|
|
for i=0,4 do rect(pos,y-(4-i),pos+i,y-(4-i),8) end
|
|
line(pos-1,y,pos-1,y-6,6)
|
|
line(pos+5,y,pos-1,y-6,6)
|
|
else
|
|
pos=pos-5
|
|
for i=0,4 do rect(pos+i,y-i,pos+4,y-i,8) end
|
|
line(pos+5,y,pos+5,y-6,6)
|
|
line(pos-1,y,pos+5,y-6,6)
|
|
end
|
|
end
|
|
|
|
balloon.cursor={x=balloon.rect.x+8,y=balloon.rect.y+7}
|
|
end,
|
|
|
|
narrator=function(obj)
|
|
balloon.rect={x=8,y=48,w=144,h=35}
|
|
balloon.text="HAS ACONSEGUIT:\n"..obj.name.."!"
|
|
balloon.color=8
|
|
balloon.pos=1
|
|
balloon.ini=1
|
|
balloon.obj=obj
|
|
balloon.quick=false
|
|
|
|
balloon.old_update=update
|
|
update=balloon.update
|
|
|
|
local x,y,w,h=balloon.rect.x,balloon.rect.y,balloon.rect.w,balloon.rect.h
|
|
rectfill(x+1,y+1,x+w+1,y+h+1,5)
|
|
rectfill(x,y,x+w,y+h,15)
|
|
rect(x,y,x+w,y+h,6)
|
|
|
|
balloon.cursor={x=balloon.rect.x+12,y=balloon.rect.y+11}
|
|
end,
|
|
|
|
update=function()
|
|
if anykey() then
|
|
if balloon.pos<0 then
|
|
update=balloon.old_update
|
|
scene.cont()
|
|
else
|
|
balloon.quick=true
|
|
end
|
|
end
|
|
|
|
if not beat() and not balloon.quick then return end
|
|
|
|
if balloon.pos<0 then
|
|
if balloon.obj then
|
|
setsource(objectes)
|
|
sspr(balloon.obj.x,balloon.obj.y,16,16,balloon.rect.x+balloon.rect.w-28,balloon.rect.y+10)
|
|
end
|
|
local col=8
|
|
if flr(time()*4)%2==0 then col=10 end
|
|
local x,y=balloon.rect.x+balloon.rect.w-8, balloon.rect.y+balloon.rect.h-6
|
|
line(x,y,x+4,y,col)
|
|
line(x+1,y+1,x+3,y+1,col)
|
|
line(x+2,y+2,x+2,y+2,col)
|
|
if btnp(KEY_SPACE) then
|
|
update=balloon.old_update
|
|
end
|
|
else
|
|
local txt=string.sub(balloon.text,balloon.ini,balloon.pos)
|
|
local char=string.sub(balloon.text,balloon.pos,balloon.pos)
|
|
if char=='' then
|
|
-- final
|
|
balloon.pos=-1
|
|
--update=balloon.old_update
|
|
elseif char=='\n' then
|
|
-- salt de linea
|
|
balloon.pos=balloon.pos+1
|
|
balloon.ini=balloon.pos
|
|
--balloon.cursor.x=balloon.rect.x+8
|
|
balloon.cursor.y=balloon.cursor.y+9
|
|
else
|
|
text(txt,balloon.cursor.x,balloon.cursor.y,balloon.color)
|
|
balloon.pos=balloon.pos+1
|
|
--balloon.cursor.x=balloon.cursor.x+4
|
|
end
|
|
end
|
|
end
|
|
}
|