Compare commits
3 Commits
f9e28fa0e2
...
color_theo
Author | SHA1 | Date | |
---|---|---|---|
5634fcf4a4
|
|||
447a1bedd0
|
|||
0f7c7a810b
|
@ -1,61 +0,0 @@
|
||||
pico-8 cartridge // http://www.pico-8.com
|
||||
version 41
|
||||
__lua__
|
||||
-- the parser
|
||||
|
||||
parser = {}
|
||||
mknew(parser)
|
||||
|
||||
-- calls parse_into with a nop
|
||||
-- emit function.
|
||||
function parser:parse(str)
|
||||
self:parse_into(str, function() end)
|
||||
end
|
||||
|
||||
-- read a file of commands and
|
||||
-- execute them, emitting the
|
||||
-- results from each call into
|
||||
-- `emit` as a table per row.
|
||||
--
|
||||
-- a "command" is a method on
|
||||
-- self. a row alternates
|
||||
-- commands with args. when
|
||||
-- calling a command, it also
|
||||
-- gets a table of previous
|
||||
-- results as the first arg.
|
||||
-- args are split on ','.
|
||||
function parser:parse_into(str, emit)
|
||||
for row in all(split(str, "\n")) do
|
||||
local prev = {}
|
||||
local sectors = split(row, ":")
|
||||
for i=1,#sectors,2 do
|
||||
local x = self[sectors[i]](self, prev, usplit(sectors[i+1]))
|
||||
if (x) add(prev, x)
|
||||
end
|
||||
emit(prev)
|
||||
end
|
||||
end
|
||||
|
||||
-- saves prev[sel] as self.name.
|
||||
-- if sel is unspecified, saves
|
||||
-- all of prev (as a table).
|
||||
function parser:saveas(prev, name, sel)
|
||||
self[name] = sel and prev[sel] or prev
|
||||
end
|
||||
|
||||
-- returns its args, ignoring
|
||||
-- prev. Used to stuff things
|
||||
-- into prev. args are packed
|
||||
-- if there's multiple.
|
||||
function parser:val(_, ...)
|
||||
local ret := pack(...)
|
||||
if (#ret == 1) return ret[1]
|
||||
return ret
|
||||
end
|
||||
|
||||
function parser:bind(_, fn, ...)
|
||||
local f = self[fn]
|
||||
return function()
|
||||
f(...)
|
||||
end
|
||||
end
|
450
updatedshmup.p8
450
updatedshmup.p8
@ -26,19 +26,22 @@ end
|
||||
-- ret is definitely not nil
|
||||
-- before calling setmetatable.
|
||||
-- use to initialize mutables.
|
||||
--
|
||||
-- if there was a previous new,
|
||||
-- it is invoked on the new
|
||||
-- object *after* more, because
|
||||
-- this works better with the
|
||||
-- `more` impls i use.
|
||||
function mknew(tt, more)
|
||||
local mt,oldnew = {__index=tt},tt.new
|
||||
tt.new=function(ret)
|
||||
if(not ret) ret = {}
|
||||
if(more) more(ret)
|
||||
if(oldnew) oldnew(ret)
|
||||
setmetatable(ret, mt)
|
||||
local mt = {__index=tt}
|
||||
-- check "more" only once ever
|
||||
if more then
|
||||
tt.new = function(ret)
|
||||
if (not ret) ret = {}
|
||||
more(ret)
|
||||
setmetatable(ret, mt)
|
||||
return ret
|
||||
end
|
||||
else
|
||||
tt.new=function(ret)
|
||||
if (not ret) ret = {}
|
||||
setmetatable(ret, mt)
|
||||
return ret
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -118,10 +121,9 @@ function _init()
|
||||
init_blip_pals()
|
||||
wipe_level()
|
||||
primary_ship.main_gun = zap_gun.new()
|
||||
load_level(example_level_csv)
|
||||
load_level(example_level)
|
||||
state = game
|
||||
pal(2,129)
|
||||
pal()
|
||||
pal(0)
|
||||
end
|
||||
|
||||
function once_next_frame(f)
|
||||
@ -133,23 +135,8 @@ function once_next_frame(f)
|
||||
}
|
||||
end
|
||||
|
||||
-- health gradients for 1..5 hp
|
||||
-- exactly, then all "more".
|
||||
hpcols_lut = csv[[36
|
||||
34, 136
|
||||
34, 130, 136
|
||||
34, 34, 130, 136
|
||||
34, 34, 130, 130, 136]]
|
||||
|
||||
-- call after any change to maxhp
|
||||
-- configures health gradient
|
||||
function init_hpcols()
|
||||
hpcols = hpcols_lut[min(primary_ship.maxhp,6)]
|
||||
end
|
||||
|
||||
function wipe_level()
|
||||
primary_ship = player.new()
|
||||
init_hpcols()
|
||||
pships = linked_list.new()
|
||||
pships:push_back(primary_ship)
|
||||
eships = linked_list.new()
|
||||
@ -244,6 +231,17 @@ function updategame()
|
||||
if (not pships.next) state = lose
|
||||
end
|
||||
|
||||
function parse_pal(str)
|
||||
local ret = split(str)
|
||||
for i=0,15 do
|
||||
ret[i]=ret[i+1]
|
||||
end
|
||||
ret[16] = nil
|
||||
return ret
|
||||
end
|
||||
|
||||
mainpal = parse_pal"0,134,141,138,4,5,6,7,8,9,10,11,12,13,8,12"
|
||||
|
||||
function _draw()
|
||||
fillp(0)
|
||||
drawgame()
|
||||
@ -309,6 +307,8 @@ function pukeboard(item)
|
||||
end
|
||||
|
||||
function drawgame()
|
||||
pal(0)
|
||||
pal(mainpal, 1)
|
||||
clip(0,0,112,128)
|
||||
rectfill(0,0,112,128,0)
|
||||
for slist in all{intangibles_bg, pbullets, pships, eships, ebullets, intangibles_fg} do
|
||||
@ -318,7 +318,6 @@ function drawgame()
|
||||
drawhud()
|
||||
end
|
||||
|
||||
powcols=split"170,154,153,148,68"
|
||||
function drawhud()
|
||||
-- 112-and-right is hud zone
|
||||
rectfill(112, 0, 127, 127,0x56)
|
||||
@ -331,17 +330,15 @@ function drawhud()
|
||||
|
||||
dropshadow("pwr",114,59,1)
|
||||
inset(114,66,125,92)
|
||||
fillp(0x5a5a)
|
||||
vertmeter(115,67,124,91,primary_ship.power, primary_ship.max_power, powcols)
|
||||
vertmeter(115,67,124,91,primary_ship.power, primary_ship.max_power, 9,8)
|
||||
|
||||
|
||||
dropshadow("h s",114,97,1)
|
||||
inset(114,104,125,125)
|
||||
line(119,105,119,124,119)
|
||||
line(120,105,120,125,85)
|
||||
vertmeter(115,105,118,124,primary_ship.hp, primary_ship.maxhp, hpcols)
|
||||
vertmeter(121,105,124,124,primary_ship.shield, primary_ship.maxshield,{204,220,221})
|
||||
fillp(0)
|
||||
vertmeter(115,105,118,124,primary_ship.hp, primary_ship.maxhp, 8,3)
|
||||
vertmeter(121,105,124,124,primary_ship.shield, primary_ship.maxshield,12,3)
|
||||
end
|
||||
|
||||
function draw_gun_info(lbl,fgc,x,y,gun)
|
||||
@ -366,20 +363,17 @@ function draw_gun_info(lbl,fgc,x,y,gun)
|
||||
end
|
||||
end
|
||||
|
||||
function vertmeter(x0,y0,x1,y1,val,maxval,cols)
|
||||
function vertmeter(x0,y0,x1,y1,val,maxval,col,seg)
|
||||
if (val <= 0) return
|
||||
local h = y1-y0
|
||||
local px = -flr(-(h*val)\maxval)
|
||||
local ncols = #cols
|
||||
local firstcol = ((h-px)*ncols\h)+1
|
||||
local lastbottom = y0+(h*firstcol\ncols)
|
||||
rectfill(x0, y1-px, x1, lastbottom, cols[firstcol])
|
||||
for i=firstcol+1,ncols do
|
||||
local bottom = y0+h*i\ncols
|
||||
rectfill(x0,lastbottom,x1,bottom,cols[i])
|
||||
lastbottom = bottom
|
||||
end
|
||||
local h = y1-y0+1
|
||||
local per_seg = ceil((h+1)/seg) - 1
|
||||
local px = (h-seg+1)*val\maxval
|
||||
while px > 0 do
|
||||
rectfill (x0, y1-min(px, per_seg)+1, x1, y1, col)
|
||||
px -= per_seg
|
||||
y1 -= per_seg+1
|
||||
end
|
||||
end
|
||||
|
||||
function inset(x0,y0,x1,y1)
|
||||
rectfill(x0,y0,x1,y1,0)
|
||||
@ -483,7 +477,7 @@ end
|
||||
function ship_m:draw()
|
||||
if(self.fx_pal) pal(self.fx_pal)
|
||||
spr(self.sprite, self.x, self.y, self.size, self.size)
|
||||
pal()
|
||||
pal(0)
|
||||
end
|
||||
|
||||
function hurtbox(ship)
|
||||
@ -669,29 +663,34 @@ blocky = frownie.new{
|
||||
}
|
||||
mknew(blocky)
|
||||
|
||||
spewy = frownie.new{
|
||||
sprite=26,
|
||||
power=-20,
|
||||
hurt = {
|
||||
x_off=0,
|
||||
y_off=1,
|
||||
width=8,
|
||||
height=5
|
||||
},
|
||||
hp=1,
|
||||
maxpower=70,
|
||||
generator=0.5,
|
||||
fire_off_x=4,
|
||||
fire_off_y = 7,
|
||||
grab_butts=function()
|
||||
local butts=frownie.grab_butts()
|
||||
butts[5]=1
|
||||
return butts
|
||||
end
|
||||
}
|
||||
mknew(spewy, function(ship)
|
||||
ship.main_gun=ship.main_gun or protron_gun.new{enemy=true}
|
||||
end})
|
||||
function spawn_spewy_at(x, y)
|
||||
local spewy = frownie.new{
|
||||
x = x,
|
||||
y = y,
|
||||
sprite = 26,
|
||||
power = -20,
|
||||
hurt = {
|
||||
x_off = 0,
|
||||
y_off = 1,
|
||||
width = 8,
|
||||
height = 5
|
||||
},
|
||||
|
||||
hp = 1,
|
||||
maxpower = 70,
|
||||
generator = 0.5,
|
||||
main_gun = protron_gun.new{enemy=true},
|
||||
fire_off_x = 4,
|
||||
fire_off_y = 7,
|
||||
grab_butts = function()
|
||||
local butts = frownie.grab_butts()
|
||||
butts[5] = 1
|
||||
return butts
|
||||
end,
|
||||
}
|
||||
eships:push_back(spewy)
|
||||
return spewy
|
||||
end
|
||||
|
||||
chasey = ship_m.new{
|
||||
sprite = 5,
|
||||
@ -716,47 +715,59 @@ chasey = ship_m.new{
|
||||
thrust = 0.2,
|
||||
drag = 0.075,
|
||||
slip = true,
|
||||
}
|
||||
mknew(chasey, function(ship)
|
||||
ship.main_gun=ship.main_gun or zap_gun.new{enemy=true}
|
||||
end)
|
||||
|
||||
function chasey:grab_butts()
|
||||
local butts = {[0]=0,0,0,0,0,0}
|
||||
if (self.x < primary_ship.x) butts[1] = 1
|
||||
if (self.x > primary_ship.x) butts[0] = 1
|
||||
if (self.x - 16 < primary_ship.x and self.x + 16 > primary_ship.x) butts[5] = 1
|
||||
return butts
|
||||
end
|
||||
|
||||
xl_chasey=chasey.new{
|
||||
size=2,
|
||||
maxspd=1.25,
|
||||
hurt = {
|
||||
x_off = 2,
|
||||
y_off = 4,
|
||||
width = 12,
|
||||
height = 10
|
||||
},
|
||||
hp = 20,
|
||||
shield = 5,
|
||||
boss = true,
|
||||
slip = false,
|
||||
main_gun = zap_gun.new{enemy=true},
|
||||
grab_butts = function(self)
|
||||
local butts = chasey.grab_butts(self)
|
||||
if (self.y < 4) butts[3] = 1
|
||||
local butts = {0,0,0,0,0}
|
||||
butts[0] = 0
|
||||
if (self.x < primary_ship.x) butts[1] = 1
|
||||
if (self.x > primary_ship.x) butts[0] = 1
|
||||
if (self.x - 16 < primary_ship.x and self.x + 16 > primary_ship.x) butts[5] = 1
|
||||
return butts
|
||||
end,
|
||||
draw = function(self)
|
||||
if(self.fx_pal) pal(self.fx_pal)
|
||||
sspr(40, 0, 8, 8, self.x, self.y, 16, 16)
|
||||
pal()
|
||||
end,
|
||||
}
|
||||
mknew(xl_chasey, function(ship)
|
||||
ship.main_gun=ship.main_gun or zap_gun.new{enemy=true}
|
||||
end)
|
||||
mknew(chasey)
|
||||
|
||||
function spawn_chasey_at(x, y)
|
||||
local c = chasey.new{
|
||||
x = x,
|
||||
y = y,
|
||||
main_gun = zap_gun.new{enemy=true},
|
||||
}
|
||||
eships:push_back(c)
|
||||
return c
|
||||
end
|
||||
|
||||
function spawn_xl_chasey_at(x, y)
|
||||
local c = chasey.new{
|
||||
x = x,
|
||||
y = y,
|
||||
size = 2,
|
||||
maxspd = 1.25,
|
||||
hurt = {
|
||||
x_off = 2,
|
||||
y_off = 4,
|
||||
width = 12,
|
||||
height = 10
|
||||
},
|
||||
hp = 20,
|
||||
shield = 5,
|
||||
boss = true,
|
||||
slip = false,
|
||||
main_gun = zap_gun.new{enemy=true},
|
||||
grab_butts = function(self)
|
||||
local butts = chasey.grab_butts(self)
|
||||
if (self.y < 4) butts[3] = 1
|
||||
return butts
|
||||
end,
|
||||
draw = function(self)
|
||||
if(self.fx_pal) pal(self.fx_pal)
|
||||
sspr(40, 0, 8, 8, self.x, self.y, 16, 16)
|
||||
pal(0)
|
||||
end,
|
||||
}
|
||||
eships:push_back(c)
|
||||
return c
|
||||
end
|
||||
-->8
|
||||
-- collisions
|
||||
|
||||
@ -827,9 +838,7 @@ end
|
||||
|
||||
-- a level is a map from
|
||||
-- effective frame number to
|
||||
-- a list of actions for that
|
||||
-- frame. an action is a
|
||||
-- method name and its args.
|
||||
-- callback for that frame.
|
||||
|
||||
-- effective frame number stops
|
||||
-- when freeze count is nonzero
|
||||
@ -853,26 +862,18 @@ freeze = 0
|
||||
|
||||
eol = {}
|
||||
|
||||
function load_level(levelfile)
|
||||
function load_level(lvltbl)
|
||||
distance = 0
|
||||
lframe = 0
|
||||
freeze = 0
|
||||
leveldone = false
|
||||
current_level = {}
|
||||
local found_eol = false
|
||||
if (type(levelfile)=="string") levelfile = csv(levelfile)
|
||||
for row in all(levelfile) do
|
||||
local x = current_level[row[1]]
|
||||
if row[2] == "eol" then
|
||||
found_eol = true
|
||||
assert(x==nil, "events on eol frame")
|
||||
current_level[row[1]] = eol
|
||||
else
|
||||
row.next = x
|
||||
currentlevel[row[1]]=row
|
||||
end
|
||||
-- copy the level so we can
|
||||
-- modify it dynamically
|
||||
-- without losing the original
|
||||
for frame, cb in pairs(lvltbl) do
|
||||
current_level[frame] = cb
|
||||
end
|
||||
assert found_eol
|
||||
leveldone = false
|
||||
end
|
||||
|
||||
function level_frame()
|
||||
@ -880,19 +881,13 @@ function level_frame()
|
||||
if (current_level == nil) return true
|
||||
if freeze == 0 then
|
||||
distance += 1
|
||||
local cbs = current_level[distance]
|
||||
if cbs ~= nil then
|
||||
if cbs == eol then
|
||||
local cb = current_level[distance]
|
||||
if cb ~= nil then
|
||||
if cb == eol then
|
||||
current_level = nil
|
||||
return true
|
||||
else
|
||||
while cbs do
|
||||
assert(cbs[1] == distance)
|
||||
local f = _ENV[cbs[2]]
|
||||
assert(type(f) == "function", cbs[2].." at "..distance..." is not a function")
|
||||
f(unpack(cbs, 3))
|
||||
cbs=cbs.next
|
||||
end
|
||||
cb()
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -901,7 +896,14 @@ end
|
||||
-->8
|
||||
-- example level
|
||||
|
||||
|
||||
function spawn_rnd_x(typ)
|
||||
s = typ.new{
|
||||
x = rnd(104),
|
||||
y = -(typ.size * 8 - 1)
|
||||
}
|
||||
eships:push_back(s)
|
||||
return s
|
||||
end
|
||||
|
||||
function spawn_blocking_rnd_x(typ)
|
||||
freeze += 1
|
||||
@ -1007,89 +1009,51 @@ function spawn_blocking_boss_chasey()
|
||||
return c
|
||||
end
|
||||
|
||||
function std_spawn(tnm, n, blocking, goodie,altspr)
|
||||
local typ = _ENV[tnm]
|
||||
assert(typ and typ.new, tostr(tnm).." not a class")
|
||||
for i=1,(n or 1) do
|
||||
spawn_rnd(typ, blocking, goodie,altspr)
|
||||
end
|
||||
end
|
||||
|
||||
-- blocking: 1 or 0
|
||||
function spawn_rnd(typ, blocking, goodie,altspr)
|
||||
freeze += blocking
|
||||
s = typ.new{
|
||||
x = rnd(104),
|
||||
y = -(typ.size * 8 - 1)
|
||||
ice=blocking
|
||||
die=function(self)
|
||||
freeze -= self.ice
|
||||
self.ice=0
|
||||
typ.die(self)
|
||||
spawn_goodie(goodie, self.x, self.y, self.size)
|
||||
end
|
||||
}
|
||||
if (altspr) s.spr = altspr
|
||||
eships:push_back(s)
|
||||
return s
|
||||
end
|
||||
|
||||
-- TODO: spawn_goodie compatible versions of gun drops
|
||||
-- TODO: goodie table
|
||||
function spawn_goodie(goodie_name, x, y, sz)
|
||||
if (not goodie_name or #goodie_name == 0) return
|
||||
local sh = sz and sz/2 or 0
|
||||
goodies[goodie_name].new{}:spawn_at(x+sh,y+sh)
|
||||
end
|
||||
|
||||
function multi(times, interval, fnm, ...)
|
||||
local f,irm = _ENV[fnm],interval
|
||||
assert(type(f) == "function", fnm.." not a function")
|
||||
fnm(...)
|
||||
events:push_back{move=function()
|
||||
irm-=1
|
||||
if irm <= 0 then
|
||||
irm=interval
|
||||
times-=1
|
||||
fnm(...)
|
||||
return times <= 1
|
||||
end
|
||||
end}
|
||||
end
|
||||
|
||||
-- then convert sample_level to csv.
|
||||
-- spawn_spec_gun_at and spawn_main_gun_at will need parsed forms.
|
||||
-- the boss also needs to be reachable, but one-off is fine.
|
||||
-- each row of level csv is offset,event,event-args...
|
||||
-- where offset,eol is a special case.
|
||||
|
||||
example_level_csv=[[1,spawn_frownie
|
||||
60,spawn_bonus_vulcan_chasey
|
||||
61,spawn_blocky
|
||||
85,spawn_spewy
|
||||
100,spawn_spewy
|
||||
115,spawn_spewy
|
||||
130,spawn_bonus_frownie
|
||||
145,spawn_spewy
|
||||
200,spawn_chasey
|
||||
250,spawn_blocking_blocky
|
||||
285,spawn_spec_gun_at,35,-11,blast_gun
|
||||
310,spawn_blocking_blocky
|
||||
310,spawn_blocking_blocky
|
||||
310,spawn_blocking_blocky
|
||||
311,spawn_frownie
|
||||
350,spawn_main_gun_at,70,-11,protron_gun
|
||||
401,spawn_frownie
|
||||
420,spawn_blocking_frownie
|
||||
430,spawn_bonus_vulcan_chasey
|
||||
450,spawn_frownie
|
||||
465,spawn_bonus_frownie
|
||||
480,spawn_chasey
|
||||
500,multi,20,12,spawn_blocking_blocky
|
||||
501,spawn_bonus_frownie
|
||||
620,spawn_blocking_blocky
|
||||
700,spawn_blocking_boss_chasey
|
||||
701,eol]]
|
||||
example_level = {
|
||||
[1]=spawn_frownie,
|
||||
[60]=spawn_bonus_vulcan_chasey,
|
||||
[61]=spawn_blocky,
|
||||
[85]=spawn_spewy,
|
||||
[100]=spawn_spewy,
|
||||
[115]=spawn_spewy,
|
||||
[130]=spawn_bonus_frownie,
|
||||
[145]=spawn_spewy,
|
||||
[200]=spawn_chasey,
|
||||
[250]=spawn_blocking_blocky,
|
||||
[285]=function()
|
||||
spawn_spec_gun_at(35, -11, blast_gun)
|
||||
end,
|
||||
[310]=function()
|
||||
spawn_blocking_blocky()
|
||||
spawn_blocking_blocky()
|
||||
spawn_blocking_blocky()
|
||||
end,
|
||||
[311]=spawn_frownie,
|
||||
[350]=function()
|
||||
spawn_main_gun_at(70, -11, protron_gun)
|
||||
end,
|
||||
[401]=spawn_frownie,
|
||||
[420]=spawn_blocking_frownie,
|
||||
[430]=spawn_bonus_vulcan_chasey,
|
||||
[450]=spawn_frownie,
|
||||
[465]=spawn_bonus_frownie,
|
||||
[480]=spawn_chasey,
|
||||
[500]=function()
|
||||
local tnext = lframe
|
||||
local remain = 20
|
||||
events:push_back{move=function()
|
||||
if (lframe < tnext) return false
|
||||
spawn_blocking_blocky()
|
||||
tnext = lframe + 0x0.000c
|
||||
remain -= 1
|
||||
return (remain <= 0)
|
||||
end}
|
||||
end,
|
||||
[501]=spawn_bonus_frownie,
|
||||
[620]=spawn_blocking_blocky,
|
||||
[700]=spawn_blocking_boss_chasey,
|
||||
[701]=eol
|
||||
}
|
||||
|
||||
-->8
|
||||
-- bullet and gun behaviors
|
||||
@ -1966,29 +1930,29 @@ function spawn_spec_gun_at(x, y, gunt)
|
||||
draw = function(self)
|
||||
pal(spec_gun_pl)
|
||||
powerup.draw(self)
|
||||
pal()
|
||||
pal(0)
|
||||
spr(self.gun.icon, self.x+2, self.y+2, 1, 1)
|
||||
end
|
||||
}
|
||||
gun_p:spawn_at(x, y)
|
||||
end
|
||||
__gfx__
|
||||
00000000000650000000000000000000bb0b50b59909209200cc0c00000000003b00000082000000e00e8002e00e800200333300002222000000000000000000
|
||||
00000000006765000000000000cccc00b50b3055920940220c0000c000bbbb0037000000a2000000e0e8880240e8480403bbbb30028888200000000000000000
|
||||
00700700006d6500000000000cddddd00b33335009444420c00c000c0b333330b7000000a8000000e88e2882e48e24823bbaabb3288aa8820000000000000000
|
||||
00077000067c665000000000cdd10cd10b3dd350094dd42000c0000cb3350b35b7000000a8000000e88e2882484e24423ba77ab328a77a820000000000000000
|
||||
00077000067d665000000000cd10cdd100b3350000944200c0000000b350b335b7000000a8000000e88e2882e84e28823ba77ab328a77a820000000000000000
|
||||
0070070065666765000000000ddddd100b33355009444220c000000c03333350b7000000a800000008888820048488203bbaabb3288aa8820000000000000000
|
||||
000000006506506500000000001111000b0b5050090920200c0000c00055550037000000a2000000008882000048420003bbbb30028888200000000000000000
|
||||
00000000650000650000000000000000000b50000009200000c0cc00000000003b00000082000000000820000008200000333300002222000000000000000000
|
||||
00000000000650000006500000000000b000000b80000000700000000bb0000008800000000000000009200000000000cccccccd000650000000000000000000
|
||||
0000000000675000000765000000000000bbbb0080000000b0000000b76300008a920000000000009009200200000000c111111d006765000000000000000000
|
||||
00000000006d6500006d6500000000000b0000b09000000030000000b663000089920000000550009994444200000000c111111d006d65000000000000000000
|
||||
00000000067c6650067c6650000000000b0bb0b0a000000030000000033000000220000000576d009446544200000000c111111d067c66500000000000000000
|
||||
00000000067d6650067d6650000000000b0bb0b00000000000000000000000000000000000566d009244442200000000c111111d067d66500000000000000000
|
||||
000000005666657576667650000000000b0000b000000000000000000000000000000000000dd0009092220200000000c111111d656667650000000000000000
|
||||
0000000056565066665656500000000000bbbb0000000000000000000000000000000000000000000090020000000000c111111d650650650000000000000000
|
||||
00000000565000566500065000000000b000000b000000000000000000000000000000000000000000a00a0000000000cddddddd650000650000000000000000
|
||||
00000000000650000000000000000000d20d20d2d20d20d200cc0c00000000004b00000098000000600661011006610100444400002222000000000000000000
|
||||
00000000006765000000000000777700d20dd022d20dd0220c0000c000cccc0043000000a8000000606666016066160104bbbb40028888200000000000000000
|
||||
00700700006565000000000007ddddd00dd2dd200dd2dd20c00c000c0cddddd0b3000000a900000061671611616716114bb33bb4288aa8820000000000000000
|
||||
00077000067f6650000000007dd207d20d2cc2200d27722000c0000ccdd20cd2b3000000a900000061671611116116114b3333b428aaaa820000000000000000
|
||||
0007700006756650000000007d207dd200dd220000dd2200c0000000cd20cdd2b3000000a900000066671611666711114b3333b428aaaa820000000000000000
|
||||
0070070065666765000000000ddddd200d2d22200d2d2220c000000c0ddddd20b3000000a900000006666610061666104bb33bb4288aa8820000000000000000
|
||||
000000006506506500000000002222000d0d20200d0d20200c0000c00022220043000000a8000000006611000066110004bbbb40028888200000000000000000
|
||||
00000000650000650000000000000000000d2000000d200000c0cc00000000004b00000098000000000610000006100000444400002222000000000000000000
|
||||
00000000000650000006500000000000b000000b80000000300000000660000008800000000000000009900000000000cccccccd000650000000000000000000
|
||||
0000000000675000000765000000000000bbbb0080000000b0000000633500008aa20000000000009009900400000000c000000d006765000000000000000000
|
||||
000000000065650000656500000000000b0000b09000000040000000633500008aa20000000550009499994400000000c000000d006565000000000000000000
|
||||
00000000067f6650067f6650000000000b0bb0b0a000000040000000055000000220000000576d009497744400000000c000000d067f66500000000000000000
|
||||
000000000675665006756650000000000b0bb0b00000000000000000000000000000000000566d009994444400000000c000000d067566500000000000000000
|
||||
000000005666657576667650000000000b0000b000000000000000000000000000000000000dd0009099440400000000c000000d656667650000000000000000
|
||||
0000000056565066665656500000000000bbbb0000000000000000000000000000000000000000000090040000000000c000000d650650650000000000000000
|
||||
00000000565000566500065000000000b000000b00000000000000000000000000000000000000000090040000000000cddddddd650000650000000000000000
|
||||
000000000000000000000000000000000000000000a0008000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000000000000090008000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000000000800a0000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
@ -1998,12 +1962,12 @@ __gfx__
|
||||
00000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000cccccccc77000000007700000000770000000077000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000c11ee11d70000000077000000007700000000770000000070000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000c11ee11d00000000770000000077000000007700000000770000000700000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000ceeeeeed00000000700000000770000000077000000007700000007700000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000ceeeeeed00000000000000007700000000770000000077000000077000000007000000000000000000000000
|
||||
0000000000000000000000000000000000000000c11ee11d00000000000000007000000007700000000770000000770000000077000000000000000000000000
|
||||
0000000000000000000000000000000000000000c11ee11d00000000000000000000000077000000007700000007700000000770000000070000000000000000
|
||||
0000000000000000000000000000000000000000c007700d70000000077000000007700000000770000000070000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000c007800d00000000770000000077000000007700000000770000000700000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000c777888d00000000700000000770000000077000000007700000007700000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000c777888d00000000000000007700000000770000000077000000077000000007000000000000000000000000
|
||||
0000000000000000000000000000000000000000c007800d00000000000000007000000007700000000770000000770000000077000000000000000000000000
|
||||
0000000000000000000000000000000000000000c008800d00000000000000000000000077000000007700000007700000000770000000070000000000000000
|
||||
0000000000000000000000000000000000000000cddddddd00000000000000000000000070000000077000000077000000007700000000770000000000000000
|
||||
cccccccccccc0000cccccccccccc0000cccccccccccc0000cccccccccccc0000cccccccccccc0000cccccccccccc0000cccccccccccc0000cccccccccccc0000
|
||||
c1111111111d0000c1111111111d0000c1111111111d0000c1111111111d0000c1111111111d0000c111eeee111d0000ceee2222eeed0000c2221111222d0000
|
||||
|
Reference in New Issue
Block a user