Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*welcome to the pdg 1.5 codebase
- they say
- if you look directly at it
- you go insane, your eyeballs catch on fire, then all your internal organs rupture
- -root
- */
- /*also if you're wondering:this was gonna be a different game (with a bigger scope)
- back when kawaiii was announced
- we got the platformer engine working in 2 days...then got lazy for a month
- it was too late for the thing we were going to make so we just made this in 6 days
- apsa was the codename for the old thing but ehh not gonna bother changing it
- and i guess it technically makes sense because you can read it as "a pizza"
- *shot*
- */
- freeslot(
- "sfx_pdglsr"
- )
- sfxinfo[sfx_pdglsr] = {
- singular = false,
- priority = 64
- }
- //-------------------------
- //local values
- local levels = {}
- levels[1] = {}
- levels[2] = {}
- levels[3] = {}
- //level 1
- levels[1].startx=32
- levels[1].starty=304
- levels[1].width=412
- levels[1].height=44
- levels[1].tiles = {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,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,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,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,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,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,1,2,3,3,3,1,2,3,3,12,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,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,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,12,13,3,3,3,12,13,3,3,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,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,1,2,3,3,7,8,3,3,3,3,3,3,7,8,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,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,12,13,3,3,18,19,3,3,3,3,3,3,18,19,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,7,8,7,8,7,8,7,8,7,8,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,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,1,2,3,3,7,8,3,3,3,3,3,3,7,8,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,18,19,18,19,18,19,18,19,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,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,12,13,3,3,18,19,3,3,3,3,3,3,18,19,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,1,2,3,3,3,3,3,3,3,3,1,2,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,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,1,2,3,3,7,8,3,3,3,3,3,3,7,8,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,12,13,3,3,3,3,1,2,3,3,12,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,18,19,18,19,3,3,3,3,3,3,3,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,12,13,3,3,18,19,3,3,3,3,3,3,18,19,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,7,8,7,8,7,8,7,8,7,8,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,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,1,2,3,3,7,8,3,3,3,3,3,3,7,8,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,18,19,18,19,18,19,18,19,2,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,18,19,18,19,3,3,3,3,3,3,3,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,12,13,3,3,18,19,3,3,3,3,3,3,18,19,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,1,2,3,3,3,3,3,12,13,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,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,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,12,13,3,3,3,3,3,3,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,18,19,18,19,3,3,3,3,3,3,3,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,12,13,3,3,7,8,3,3,3,3,3,3,7,8,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,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,1,2,3,3,18,19,3,3,3,3,3,3,18,19,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,4,14,4,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,18,19,18,19,3,3,3,3,3,3,3,4,4,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,12,13,3,3,7,8,3,3,3,3,3,3,7,8,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,4,14,14,4,14,14,15,14,15,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,15,15,4,4,0,0,0,0,0,0,0,0,3,3,1,2,3,1,2,1,2,3,3,3,0,0,0,0,1,2,3,3,18,19,3,3,3,3,3,3,18,19,3,3,1,2,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,14,4,15,14,4,15,14,14,14,14,14,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,18,19,18,19,3,3,3,3,3,3,3,14,14,15,15,4,4,0,0,0,0,1,2,3,3,12,13,3,12,13,12,13,3,3,3,0,0,0,0,12,13,3,3,7,8,3,3,3,3,3,3,7,8,3,3,12,13,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,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,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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,14,14,15,14,14,15,14,14,14,14,4,14,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,14,14,14,14,15,15,4,4,1,2,12,13,7,8,3,3,7,8,3,3,7,8,3,3,4,4,4,4,1,2,3,3,18,19,3,3,3,3,3,3,18,19,3,3,1,2,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,0,0,0,4,4,4,4,4,4,4,4,4,4,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,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,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,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,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,0,0,0,0,0,0,0,0,0,4,14,14,14,14,4,14,4,14,14,14,15,14,4,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,18,19,18,19,3,3,3,3,1,2,1,14,14,14,14,14,14,15,15,12,13,1,2,18,19,3,3,18,19,3,3,18,19,3,3,15,15,15,15,12,13,3,3,7,8,3,3,3,3,3,3,7,8,3,3,12,13,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,0,0,0,15,15,15,15,15,15,15,15,15,15,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,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,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,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,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,0,0,0,0,0,0,0,0,0,15,14,14,14,14,15,14,15,14,14,14,14,14,15,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,7,8,7,8,3,3,3,3,12,13,12,3,3,1,2,3,3,1,2,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,1,2,3,3,18,19,3,3,3,3,3,3,18,19,3,3,1,2,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,0,0,4,4,4,1,2,1,2,1,2,1,2,1,2,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,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,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,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,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,14,4,4,5,6,5,6,4,4,4,1,2,3,3,3,3,3,1,2,3,3,1,2,3,4,4,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,18,19,18,19,3,3,1,2,1,2,1,3,3,12,13,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,15,15,15,15,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,0,0,15,15,15,12,13,12,13,12,13,12,13,12,13,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,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,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,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,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,14,4,4,5,6,5,6,4,15,15,16,17,16,17,15,15,15,12,13,3,1,2,3,3,12,13,3,3,12,13,3,15,15,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,12,13,12,13,12,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,0,0,0,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,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,0,1,2,1,2,1,2,3,3,3,3,3,1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,4,4,5,6,5,6,5,6,4,4,1,2,1,2,1,2,1,2,1,2,3,3,3,1,2,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,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,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,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,5,6,4,15,15,16,17,16,17,15,14,14,0,0,0,0,0,0,0,3,3,7,8,13,1,7,8,3,3,7,8,3,3,1,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,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,1,2,3,3,3,3,1,2,1,2,1,2,1,2,14,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,0,0,0,0,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,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,0,12,13,12,13,12,13,3,3,3,3,3,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,15,15,16,17,16,17,16,17,15,15,12,13,12,13,12,13,12,13,12,13,3,3,3,12,13,3,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,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,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,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,15,15,15,16,17,16,17,15,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,18,19,3,12,18,19,3,3,18,19,3,3,12,13,15,15,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,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,12,13,3,3,3,3,12,13,12,13,12,13,12,13,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,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,3,1,2,3,3,3,3,3,3,3,3,3,3,1,2,3,3,7,8,7,8,3,3,12,1,2,0,0,0,0,0,0,0,0,0,14,5,6,5,6,5,6,4,4,14,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,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,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,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,7,8,3,3,7,8,3,3,7,8,3,3,3,3,1,2,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,1,2,1,2,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,1,2,1,2,1,2,1,2,1,2,14,14,14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,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,3,12,13,3,3,3,3,3,1,2,3,3,3,12,13,3,3,18,19,18,19,3,3,3,12,13,0,0,0,0,0,0,0,0,0,14,16,17,16,17,16,17,15,15,14,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,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,0,0,0,0,1,2,1,2,3,3,3,1,2,3,3,3,1,2,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,3,3,3,3,3,3,7,8,3,3,7,8,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,12,13,15,15,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,12,13,12,13,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,12,13,12,13,12,13,12,13,12,13,14,14,14,14,14,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,0,0,0,0,0,15,4,14,14,14,14,14,14,14,14,14,14,14,14,14,4,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,3,3,3,1,2,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,4,4,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,0,0,0,0,0,0,1,2,1,2,3,4,14,14,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,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,12,13,12,13,3,3,3,12,13,3,3,3,12,13,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,3,3,1,2,3,3,18,19,3,3,18,19,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,1,2,3,3,3,3,1,2,3,1,2,3,3,3,1,2,3,1,2,1,2,3,3,3,3,1,2,1,2,1,2,1,2,1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,14,14,14,14,14,14,14,14,14,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,0,0,0,0,0,4,15,14,14,14,14,14,14,14,14,14,14,14,14,4,15,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,14,14,14,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,15,15,15,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,1,2,3,3,3,3,3,3,12,13,12,13,3,15,4,4,5,6,5,6,4,14,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,1,2,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,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,12,18,19,3,3,18,19,3,3,18,19,3,3,1,2,3,3,12,13,3,3,1,2,12,13,3,12,13,3,3,3,12,13,3,12,13,12,13,3,3,3,3,12,13,12,13,12,13,12,13,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,14,14,14,14,14,14,14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,15,14,14,14,14,14,14,14,14,14,14,14,14,14,15,4,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,14,14,14,14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,14,15,15,16,17,16,17,15,4,4,5,6,5,6,4,4,4,5,6,5,6,4,14,14,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,0,0,0,0,0,0,0,12,13,3,3,3,3,12,13,7,8,7,8,7,8,2,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,7,8,3,3,7,8,3,3,7,8,3,3,12,13,3,3,1,2,3,3,12,13,3,3,1,2,3,3,1,2,1,2,1,2,3,1,2,3,3,3,3,3,3,3,3,1,2,3,3,3,3,1,2,1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,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,14,14,14,14,14,14,14,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,12,13,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,14,15,15,16,17,16,17,15,15,15,16,17,16,17,15,4,4,5,6,5,6,4,4,4,3,3,3,1,2,3,3,14,14,4,4,4,4,4,5,6,4,4,4,4,4,4,5,6,4,4,4,4,4,4,5,6,4,4,4,4,3,3,1,2,3,3,3,3,3,3,3,3,3,3,18,19,18,19,18,19,13,3,3,3,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,7,8,12,13,7,8,3,3,7,8,3,3,7,8,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,12,13,1,2,1,2,1,2,12,13,3,3,12,13,12,13,12,13,3,12,13,3,3,7,8,7,8,3,3,12,13,3,3,3,3,12,13,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,1,2,3,1,2,1,2,3,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,12,13,1,2,3,3,3,3,3,3,3,3,3,3,1,2,12,13,7,8,12,13,1,2,3,3,3,3,3,7,8,7,8,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,15,15,16,17,16,17,15,15,15,1,2,3,12,13,3,3,14,14,15,15,15,15,15,16,17,15,15,15,15,15,15,16,17,15,15,15,15,15,15,16,17,15,15,15,15,3,3,12,13,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,12,13,12,13,12,13,3,3,3,3,3,1,2,3,3,3,3,1,2,3,3,18,19,18,19,3,3,1,2,3,3,7,8,3,3,1,2,1,2,1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,12,13,3,12,13,12,13,3,3,3,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,14,4,4,5,6,5,6,4,4,4,14,14,3,3,3,3,3,3,1,2,3,12,13,3,3,3,3,3,3,3,3,3,3,12,13,1,2,18,19,1,2,12,13,3,3,3,3,3,18,19,18,19,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,3,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,12,13,3,3,3,3,3,14,14,14,4,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,2,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,1,2,1,2,3,3,3,3,3,12,13,3,3,1,2,12,13,3,3,7,8,7,8,3,3,12,13,3,3,18,19,3,3,12,13,12,13,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,1,2,3,3,3,15,14,14,14,14,14,14,14,4,4,4,3,1,2,14,14,4,4,4,4,5,6,5,6,4,15,15,16,17,16,17,15,15,15,14,14,3,1,2,3,3,3,12,13,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,12,13,1,2,12,13,3,3,3,3,3,3,3,7,8,7,8,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,3,3,3,3,3,1,2,14,14,14,15,15,4,14,14,14,14,4,14,14,14,14,14,14,14,14,14,14,14,14,4,14,14,14,15,15,3,3,7,8,7,8,7,8,7,8,7,8,3,3,7,8,7,8,7,8,3,3,3,3,3,3,3,3,12,13,3,3,1,2,3,3,3,3,12,13,3,3,3,3,1,2,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,7,8,13,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,12,13,12,13,3,3,1,2,3,3,3,3,3,12,13,1,2,3,3,18,19,18,19,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,9,10,9,10,9,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,12,13,3,3,3,4,4,14,14,14,14,14,4,15,15,15,3,12,13,14,14,15,15,15,15,16,17,16,17,15,14,0,0,0,0,0,0,14,14,1,2,3,12,13,3,3,3,3,3,3,3,3,1,2,12,13,1,2,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,18,19,18,19,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,3,3,3,3,3,12,13,14,14,14,14,4,15,14,14,14,14,15,14,14,4,14,14,14,4,14,14,14,14,14,15,14,14,14,4,4,3,3,18,19,18,19,18,19,18,19,18,19,3,3,18,19,18,19,18,19,3,3,3,3,1,2,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,12,13,3,3,7,8,7,8,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,9,10,9,10,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,15,15,4,14,14,14,4,15,1,2,3,3,3,3,1,2,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,12,13,3,3,7,8,7,8,3,3,3,1,2,12,13,7,8,12,13,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,7,8,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,3,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,3,3,7,8,2,3,3,14,14,14,14,15,14,14,14,14,4,14,14,14,15,14,14,14,15,14,14,14,14,14,14,14,4,14,15,15,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,7,8,7,8,7,8,7,8,7,8,7,8,7,8,3,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,1,2,3,3,3,1,2,3,3,18,19,18,19,3,3,1,2,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,12,13,3,3,3,3,12,13,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,18,19,18,19,3,3,3,12,13,1,2,18,19,1,2,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,18,19,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,3,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,3,3,18,19,13,3,3,14,14,14,14,4,14,14,14,14,15,14,14,14,14,14,14,14,14,14,4,14,14,4,14,14,15,14,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,18,19,18,19,18,19,18,19,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,12,13,3,3,3,12,13,3,3,7,8,7,8,3,3,12,13,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,7,8,7,8,3,3,3,3,3,12,13,1,2,12,13,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,7,8,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,3,3,3,3,3,3,3,14,14,14,14,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,14,14,15,14,14,14,14,3,3,3,3,7,8,7,8,7,8,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,12,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,18,19,18,19,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,18,19,18,19,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,18,19,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,1,2,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,18,19,18,19,18,19,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,7,8,7,8,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,3,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,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,13,1,7,8,12,13,7,8,3,3,7,8,3,12,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,7,8,7,8,7,8,7,8,7,8,7,8,3,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,18,19,18,19,3,3,1,2,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,3,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,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,12,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,18,19,18,19,18,19,18,19,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,2,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,12,13,3,3,7,8,7,8,3,3,12,13,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,7,8,7,8,7,8,7,8,1,2,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,7,8,13,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,1,2,3,3,18,19,18,19,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,18,19,18,19,18,19,18,19,12,13,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,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,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,7,8,3,3,7,8,3,3,3,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,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,18,19,3,3,18,19,3,3,3,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,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,}
- levels[1].objamount=16
- /*levels[1].objs={}
- levels[1].objs[0]={}
- levels[1].objs[0].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[0].leftright=-1
- levels[1].objs[0].otype=0
- levels[1].objs[0].x=64 //pixels not fracunits
- levels[1].objs[0].y=128*/
- levels[1].objs={}
- levels[1].objs[0]={}
- levels[1].objs[0].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[0].leftright=-1
- levels[1].objs[0].otype=0
- levels[1].objs[0].x=304 //pixels not fracunits
- levels[1].objs[0].y=239
- levels[1].objs[1]={}
- levels[1].objs[1].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[1].leftright=-1
- levels[1].objs[1].otype=0
- levels[1].objs[1].x=752 //pixels not fracunits
- levels[1].objs[1].y=495
- levels[1].objs[2]={}
- levels[1].objs[2].cat=1 //category: 0=enemies 1=springs
- levels[1].objs[2].leftright=-1
- levels[1].objs[2].otype=0
- levels[1].objs[2].x=1248 //pixels not fracunits
- levels[1].objs[2].y=464
- levels[1].objs[3]={}
- levels[1].objs[3].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[3].leftright=-1
- levels[1].objs[3].otype=0
- levels[1].objs[3].x=1200 //pixels not fracunits
- levels[1].objs[3].y=479
- levels[1].objs[4]={}
- levels[1].objs[4].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[4].leftright=-1
- levels[1].objs[4].otype=0
- levels[1].objs[4].x=1552 //pixels not fracunits
- levels[1].objs[4].y=303
- levels[1].objs[5]={}
- levels[1].objs[5].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[5].leftright=-1
- levels[1].objs[5].otype=0
- levels[1].objs[5].x=2272 //pixels not fracunits
- levels[1].objs[5].y=335
- levels[1].objs[6]={}
- levels[1].objs[6].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[6].leftright=-1
- levels[1].objs[6].otype=0
- levels[1].objs[6].x=2576 //pixels not fracunits
- levels[1].objs[6].y=399
- levels[1].objs[7]={}
- levels[1].objs[7].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[7].leftright=-1
- levels[1].objs[7].otype=0
- levels[1].objs[7].x=3456 //pixels not fracunits
- levels[1].objs[7].y=575
- levels[1].objs[8]={}
- levels[1].objs[8].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[8].leftright=-1
- levels[1].objs[8].otype=0
- levels[1].objs[8].x=3568 //pixels not fracunits
- levels[1].objs[8].y=575
- levels[1].objs[9]={}
- levels[1].objs[9].cat=1 //category: 0=enemies 1=springs
- levels[1].objs[9].leftright=-1
- levels[1].objs[9].otype=0
- levels[1].objs[9].x=3664 //pixels not fracunits
- levels[1].objs[9].y=576
- levels[1].objs[10]={}
- levels[1].objs[10].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[10].leftright=-1
- levels[1].objs[10].otype=0
- levels[1].objs[10].x=3952 //pixels not fracunits
- levels[1].objs[10].y=384
- levels[1].objs[11]={}
- levels[1].objs[11].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[11].leftright=-1
- levels[1].objs[11].otype=1
- levels[1].objs[11].x=4464 //pixels not fracunits
- levels[1].objs[11].y=431
- levels[1].objs[12]={}
- levels[1].objs[12].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[12].leftright=-1
- levels[1].objs[12].otype=0
- levels[1].objs[12].x=4672 //pixels not fracunits
- levels[1].objs[12].y=335
- levels[1].objs[13]={}
- levels[1].objs[13].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[13].leftright=-1
- levels[1].objs[13].otype=0
- levels[1].objs[13].x=5024 //pixels not fracunits
- levels[1].objs[13].y=303
- levels[1].objs[14]={}
- levels[1].objs[14].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[14].leftright=-1
- levels[1].objs[14].otype=0
- levels[1].objs[14].x=5584 //pixels not fracunits
- levels[1].objs[14].y=399
- levels[1].objs[15]={}
- levels[1].objs[15].cat=0 //category: 0=enemies 1=springs
- levels[1].objs[15].leftright=-1
- levels[1].objs[15].otype=0
- levels[1].objs[15].x=5664 //pixels not fracunits
- levels[1].objs[15].y=399
- levels[1].levelend={}
- levels[1].levelend.x1=6512*FRACUNIT
- levels[1].levelend.y1=384*FRACUNIT
- levels[1].levelend.x2=6592*FRACUNIT
- levels[1].levelend.y2=512*FRACUNIT
- levels[1].levelend.event=5001 //executes once everyone is at the end
- //level 2
- levels[2].startx=32
- levels[2].starty=704
- levels[2].width=400
- levels[2].height=48
- levels[2].tiles = {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,3,12,13,12,13,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,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,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,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,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,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,0,0,0,0,0,0,0,3,1,2,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,3,1,2,1,2,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,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,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,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,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,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,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,0,0,0,0,0,0,0,3,12,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,3,3,12,13,12,13,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,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,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,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,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,1,2,3,3,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,3,3,7,8,7,8,3,3,1,2,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,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,0,0,0,0,0,0,0,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,14,14,14,14,14,14,14,14,14,14,14,14,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,14,14,1,2,1,2,3,3,1,2,1,2,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,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,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,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,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,12,13,3,3,18,19,18,19,18,19,18,19,18,19,18,19,18,19,18,19,3,3,18,19,18,19,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,4,14,14,14,14,14,14,14,14,14,14,14,4,14,14,4,14,14,15,15,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,0,0,14,14,0,0,12,13,12,13,3,3,12,13,12,13,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,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,3,3,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,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,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,1,2,3,3,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,3,3,7,8,7,8,3,3,1,2,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,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,0,0,0,0,0,0,0,3,14,14,15,14,14,14,14,14,14,14,14,14,14,14,15,14,14,15,14,14,4,4,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,0,0,14,14,0,0,1,2,7,8,3,3,7,8,1,2,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,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,1,2,3,3,3,3,3,3,3,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,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,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,12,13,3,3,18,19,18,19,18,19,18,19,18,19,18,19,18,19,18,19,3,3,18,19,18,19,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,0,0,14,14,0,0,12,13,18,19,3,3,18,19,12,13,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,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,12,13,3,3,3,3,3,3,3,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,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,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,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,0,0,14,14,0,0,14,14,1,2,7,8,3,3,7,8,1,2,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,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,1,2,3,3,7,8,3,3,7,8,3,0,1,2,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,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,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,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,0,0,14,14,0,0,14,14,12,13,18,19,3,3,18,19,12,13,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,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,12,13,3,3,18,19,3,3,18,19,3,3,12,13,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,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,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,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,1,2,3,3,3,3,3,3,3,3,3,1,2,3,3,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,0,0,14,14,0,0,14,14,1,2,1,2,3,3,1,2,1,2,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,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,1,2,3,3,3,3,3,3,3,3,3,3,1,2,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,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,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,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,3,12,13,14,14,14,14,14,14,14,14,3,12,13,3,3,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,0,0,14,14,0,0,12,13,12,13,3,3,12,13,12,13,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,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,12,13,3,3,3,3,3,3,3,3,3,3,12,13,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,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,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,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,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,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,0,0,0,0,0,0,0,0,3,14,14,4,14,14,4,14,14,14,14,14,14,14,14,4,14,14,14,14,14,3,3,1,2,3,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,0,0,14,14,0,0,1,2,7,8,3,3,7,8,1,2,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,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,1,2,3,3,7,8,3,3,7,8,3,3,1,2,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,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,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,4,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,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,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,0,0,0,0,0,0,0,0,3,14,14,15,14,14,15,14,14,14,14,14,14,14,14,15,4,4,14,14,14,14,3,12,13,3,14,14,14,14,14,14,14,14,14,0,0,0,0,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,0,0,14,14,0,0,12,13,18,19,3,3,18,19,12,13,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,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,12,13,3,3,18,19,3,3,18,19,3,3,12,13,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,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,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,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,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,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,0,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,1,2,3,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,4,4,4,1,2,7,8,3,3,7,8,1,2,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,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,1,2,3,3,3,3,3,3,3,3,3,3,1,2,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,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,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,4,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,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,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,0,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,14,14,4,4,12,13,3,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,15,15,15,12,13,18,19,3,3,18,19,12,13,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,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,12,13,3,3,3,3,3,3,3,3,3,3,12,13,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,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,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,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,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,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,0,0,0,0,0,0,0,0,3,1,2,1,2,1,2,1,2,1,2,1,2,3,14,14,14,15,15,14,14,15,15,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,1,2,1,2,14,14,14,14,14,14,14,14,14,1,2,1,2,3,3,1,2,1,2,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,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,1,2,3,3,7,8,3,3,7,8,3,3,1,2,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,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,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,4,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,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,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,0,0,0,0,0,0,0,0,3,12,13,12,13,12,13,12,13,12,13,12,13,3,1,2,14,14,4,14,14,4,4,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,3,12,13,12,13,14,14,14,14,14,14,14,14,14,12,13,12,13,3,3,12,13,12,13,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,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,12,13,3,3,18,19,3,3,18,19,3,3,12,13,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,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,1,2,1,2,1,2,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,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,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,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,0,0,0,0,0,0,0,0,3,3,1,2,1,2,1,2,1,2,1,2,1,2,12,13,1,2,15,14,14,15,15,1,2,1,2,7,8,1,2,7,8,1,2,7,8,1,2,7,8,1,2,7,8,1,2,3,1,2,1,2,14,14,14,14,14,14,14,14,14,1,2,1,2,1,2,1,2,1,2,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,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,1,2,3,3,3,3,3,3,3,3,3,3,1,2,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,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,12,13,12,13,12,13,1,2,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,4,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,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,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,0,0,0,0,0,0,0,0,3,3,12,13,12,13,12,13,12,13,12,13,12,13,3,3,12,13,3,14,14,4,4,12,13,12,13,18,19,12,13,18,19,12,13,18,19,12,13,18,19,12,13,18,19,12,13,3,12,13,12,13,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,12,13,12,13,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,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,12,13,3,3,3,3,3,3,3,3,3,3,12,13,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,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,14,14,14,14,14,12,13,1,2,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,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,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,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,0,0,0,0,0,0,0,0,3,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,3,3,3,3,1,2,3,3,1,2,3,3,1,2,3,3,1,2,3,3,1,2,1,2,3,1,2,1,2,4,4,4,1,2,1,2,1,2,1,2,1,2,1,2,1,2,14,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,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,1,2,3,3,7,8,3,3,7,8,3,3,1,2,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,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,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,12,13,1,2,1,2,4,4,4,4,4,4,1,2,4,4,4,4,4,4,1,2,4,4,4,4,4,4,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,9,10,9,10,9,10,9,10,9,10,9,2,3,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,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,0,0,0,0,0,0,0,0,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,1,2,1,2,3,12,13,3,3,12,13,3,3,12,13,3,3,12,13,3,3,12,13,12,13,3,12,13,12,13,15,15,15,12,13,12,13,12,13,12,13,12,13,12,13,12,13,0,14,0,14,0,0,0,0,0,0,0,4,4,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,18,19,3,3,18,19,3,3,12,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,14,12,13,12,13,15,15,15,15,15,15,12,13,15,15,15,15,15,15,12,13,15,15,15,15,15,15,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,9,10,9,10,9,10,9,10,9,12,13,3,3,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,12,13,12,13,3,1,2,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,14,14,14,14,14,14,14,14,14,14,14,14,4,14,14,14,14,14,0,14,0,14,0,0,0,0,0,4,15,15,4,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,1,2,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,1,2,1,2,1,2,12,13,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,12,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,0,14,0,14,0,0,0,0,15,14,14,15,14,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,12,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,14,1,2,14,4,4,4,4,4,1,2,4,14,4,4,14,4,4,4,4,4,1,2,4,4,4,4,4,4,5,6,5,6,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,1,2,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,7,8,7,8,3,3,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,3,3,1,2,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,3,3,3,14,14,14,14,14,14,1,2,1,2,1,2,3,12,13,12,13,12,13,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,12,13,12,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,14,12,13,14,15,15,15,15,15,12,13,15,14,15,15,14,15,15,15,15,15,12,13,15,15,15,15,15,15,16,17,16,17,16,17,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,12,13,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,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,14,14,14,14,14,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,18,19,18,19,3,3,18,19,18,19,18,19,18,19,18,19,18,19,18,19,18,19,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,1,2,1,2,1,2,4,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,4,14,5,6,1,2,1,2,1,2,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,0,0,0,0,1,2,3,3,1,2,1,2,1,2,1,2,1,2,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,4,14,1,2,1,2,1,2,1,2,1,2,0,0,0,0,0,0,12,13,12,13,12,13,12,13,14,14,14,14,14,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,7,8,7,8,3,3,7,8,7,8,7,8,7,8,7,8,7,8,7,8,7,8,3,3,1,2,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,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,0,0,0,0,0,0,0,3,14,14,14,14,3,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,3,3,1,2,1,2,3,3,3,3,3,3,3,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,12,13,12,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,15,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,14,16,17,12,13,12,13,12,13,14,14,14,14,14,14,14,14,14,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,0,0,0,0,12,13,3,3,12,13,12,13,12,13,12,13,12,13,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,4,15,4,12,13,12,13,12,13,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,18,19,18,19,3,3,18,19,18,19,18,19,18,19,18,19,18,19,18,19,18,19,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,12,13,12,13,3,3,3,3,3,3,3,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,1,2,1,2,1,2,14,14,14,14,14,14,14,14,14,14,1,2,1,2,3,3,1,2,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,6,3,3,4,4,3,3,14,14,14,1,2,3,1,2,1,2,1,2,1,2,1,2,1,2,1,2,7,8,7,8,1,2,0,0,0,0,1,2,3,3,1,2,14,14,14,14,14,4,4,4,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,4,15,4,15,4,15,4,15,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,0,0,0,0,0,0,0,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,1,2,1,2,3,1,2,3,3,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,12,13,12,13,12,13,14,14,14,14,14,14,14,14,14,14,12,13,12,13,3,3,12,13,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,17,3,4,15,15,3,3,14,14,14,12,13,3,12,13,12,13,12,13,12,13,12,13,12,13,12,13,18,19,18,19,12,13,0,0,0,0,12,13,3,3,12,13,14,14,14,14,14,15,15,15,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,4,15,4,15,4,15,4,15,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,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,0,0,0,0,0,0,0,3,1,2,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,12,13,12,13,3,12,13,3,3,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,1,2,3,3,14,14,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,4,4,14,15,4,4,3,3,14,14,14,4,14,14,14,14,14,14,3,3,3,3,3,3,3,3,3,3,7,8,7,8,1,2,0,0,0,0,1,2,3,3,1,2,14,14,14,14,14,4,4,4,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,4,15,4,15,4,15,4,15,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,7,8,7,8,3,3,7,8,7,8,7,8,7,8,7,8,3,3,7,8,7,8,3,3,1,2,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,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,0,0,0,0,0,0,0,3,12,13,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,1,2,1,2,1,2,3,3,3,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,12,13,12,13,12,13,3,12,13,3,14,14,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,15,15,14,14,15,15,3,3,14,14,14,15,14,14,14,14,14,14,1,2,3,3,3,3,3,3,3,3,18,19,18,19,12,13,0,0,0,0,12,13,3,3,12,13,14,14,14,14,14,15,15,15,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,15,4,15,4,15,4,15,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,18,19,18,19,3,3,18,19,18,19,18,19,18,19,18,19,3,3,18,19,18,19,3,3,12,13,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,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,0,0,0,0,0,0,0,3,3,3,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,3,3,3,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,1,2,3,3,14,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,4,14,14,14,4,3,3,14,14,14,4,14,14,14,14,14,14,12,13,3,3,3,3,7,8,3,3,7,8,7,8,1,2,4,4,4,4,1,2,3,3,1,2,4,4,4,4,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,15,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,3,3,3,3,3,3,7,8,7,8,7,8,7,8,7,8,3,3,7,8,7,8,3,3,1,2,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,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,0,0,0,0,0,0,0,3,1,2,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,1,2,1,2,3,1,2,3,1,2,7,8,1,2,7,8,1,2,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,12,13,1,2,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,15,14,14,14,15,3,3,14,14,14,15,14,14,14,14,14,14,1,2,3,3,3,3,18,19,3,3,18,19,18,19,12,13,15,15,15,15,12,13,3,3,12,13,15,15,15,15,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,3,3,3,3,3,3,18,19,18,19,18,19,18,19,18,19,3,3,18,19,18,19,3,3,12,13,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,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,0,0,0,0,0,0,0,3,12,13,14,14,14,14,14,3,3,3,14,14,14,14,14,14,14,14,14,14,14,4,3,12,13,12,13,3,12,13,3,12,13,18,19,12,13,18,19,12,13,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,14,14,14,14,14,1,2,3,3,1,2,14,14,14,14,14,14,12,13,3,3,3,3,3,3,3,3,7,8,7,8,1,2,4,4,4,4,1,2,3,3,1,2,14,14,14,14,4,4,14,14,14,14,14,14,1,2,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,7,8,3,3,1,2,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,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,0,0,0,0,0,0,0,3,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,1,2,1,2,3,3,3,3,3,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,12,13,3,7,8,3,3,7,8,3,3,7,8,3,3,3,1,2,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,4,14,14,14,14,12,13,3,3,12,13,14,14,14,14,14,14,1,2,3,3,3,3,7,8,3,3,18,19,18,19,12,13,15,15,15,15,12,13,3,3,12,13,14,14,14,14,15,15,14,14,14,14,14,14,12,13,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,18,19,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,3,3,3,14,14,14,14,4,4,12,13,12,13,3,3,3,3,3,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,1,2,3,18,19,3,3,18,19,3,3,18,19,3,3,3,12,13,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,15,14,14,14,14,4,4,4,4,4,4,14,14,14,14,14,14,12,13,3,3,3,3,18,19,3,3,7,8,7,8,1,2,14,14,14,14,1,2,3,3,1,2,14,14,14,14,4,4,14,14,14,14,14,14,1,2,3,3,7,8,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,7,8,3,3,1,2,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,15,15,3,1,2,1,2,3,1,2,3,1,2,7,8,1,2,7,8,1,2,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,14,4,14,14,14,14,15,15,15,15,15,15,14,14,14,14,1,2,1,2,3,3,3,3,3,3,3,3,18,19,18,19,12,13,14,14,14,14,12,13,3,3,12,13,14,14,14,14,15,15,14,14,14,14,14,14,12,13,3,3,18,19,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,18,19,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,3,12,13,12,13,3,12,13,3,12,13,18,19,12,13,18,19,12,13,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,14,14,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,12,13,3,3,3,3,7,8,3,3,3,3,3,3,1,2,14,14,14,14,1,2,1,2,1,2,1,2,1,2,1,2,1,2,4,4,4,4,1,2,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,4,4,4,4,1,2,1,2,1,2,3,3,3,3,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,3,3,12,13,3,7,8,3,3,7,8,3,3,7,8,3,3,3,1,2,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,14,14,14,4,14,14,14,14,4,4,4,4,4,4,14,14,1,2,1,2,1,2,3,3,3,3,18,19,3,3,3,3,3,3,12,13,14,14,14,14,12,13,12,13,12,13,12,13,12,13,12,13,12,13,15,15,15,15,12,13,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,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,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,0,0,0,0,0,0,0,3,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,12,13,12,13,12,13,3,3,3,3,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,3,3,1,2,3,18,19,3,3,18,19,3,3,18,19,3,3,3,12,13,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,14,14,14,14,15,14,14,14,14,15,15,15,15,15,15,14,14,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,3,3,1,2,14,14,14,14,4,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,1,2,3,3,7,8,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,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,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,0,0,0,0,0,0,0,3,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,1,2,1,2,1,2,1,2,1,2,1,2,3,3,3,3,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,14,14,14,14,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,3,3,18,19,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,7,8,7,8,3,3,7,8,7,8,7,8,7,8,7,8,3,3,7,8,7,8,3,3,12,13,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,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,0,0,0,0,0,0,0,3,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,12,13,12,13,12,13,3,3,3,3,12,13,12,13,12,13,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,14,14,14,14,4,4,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,1,2,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,18,19,18,19,3,3,18,19,18,19,18,19,18,19,18,19,3,3,18,19,18,19,3,3,1,2,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,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,0,0,0,0,0,0,0,3,4,4,14,14,14,14,14,14,14,14,14,14,14,14,14,1,2,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,1,2,3,3,3,3,3,0,0,0,3,0,3,0,3,3,3,0,0,0,0,0,0,0,0,0,3,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,3,14,14,14,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,3,3,3,3,3,3,7,8,7,8,7,8,7,8,7,8,3,3,7,8,7,8,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3,0,3,3,3,0,3,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,15,15,14,14,14,14,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,12,13,3,3,3,3,3,0,0,0,3,0,3,0,0,3,0,0,0,0,3,0,0,3,0,0,3,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,3,7,8,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,3,3,3,3,3,3,18,19,18,19,18,19,18,19,18,19,3,3,18,19,18,19,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,4,14,14,14,14,14,14,14,14,14,14,1,2,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,1,2,3,3,3,3,3,3,3,3,1,2,0,0,0,3,3,3,0,0,3,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,3,3,18,19,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,7,8,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,0,3,0,3,0,3,0,3,3,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,15,15,15,14,14,14,14,14,14,14,14,14,14,12,13,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,12,13,3,3,3,3,3,3,3,3,12,13,0,0,0,3,0,3,0,0,3,0,0,0,0,3,3,3,3,0,0,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,18,19,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,3,3,0,3,3,3,0,3,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,3,3,1,2,1,2,1,2,3,3,3,3,1,2,1,2,0,0,0,3,0,3,0,3,3,3,0,0,0,0,0,3,3,0,0,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,12,13,3,3,18,19,18,19,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,7,8,3,3,12,13,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11,11,11,11,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,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,3,3,3,12,13,12,13,12,13,3,3,3,3,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,8,3,3,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,14,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,14,14,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,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,1,2,3,3,7,8,7,8,3,3,3,3,3,3,3,3,3,3,3,3,3,3,18,19,18,19,3,3,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,}
- levels[2].objamount=18
- levels[2].objs={}
- levels[2].objs[0]={}
- levels[2].objs[0].cat=0 //category: 0=enemies 1=springs
- levels[2].objs[0].leftright=-1
- levels[2].objs[0].otype=0
- levels[2].objs[0].x=576 //pixels not fracunits
- levels[2].objs[0].y=172
- levels[2].objs[1]={}
- levels[2].objs[1].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[1].leftright=1
- levels[2].objs[1].otype=1
- levels[2].objs[1].x=16 //pixels not fracunits
- levels[2].objs[1].y=240
- levels[2].objs[2]={}
- levels[2].objs[2].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[2].leftright=1
- levels[2].objs[2].otype=0
- levels[2].objs[2].x=2608 //pixels not fracunits
- levels[2].objs[2].y=688
- levels[2].objs[3]={}
- levels[2].objs[3].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[3].leftright=1
- levels[2].objs[3].otype=0
- levels[2].objs[3].x=2448 //pixels not fracunits
- levels[2].objs[3].y=592
- levels[2].objs[4]={}
- levels[2].objs[4].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[4].leftright=1
- levels[2].objs[4].otype=0
- levels[2].objs[4].x=1872 //pixels not fracunits
- levels[2].objs[4].y=528
- levels[2].objs[5]={}
- levels[2].objs[5].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[5].leftright=1
- levels[2].objs[5].otype=0
- levels[2].objs[5].x=352 //pixels not fracunits
- levels[2].objs[5].y=640
- levels[2].objs[6]={}
- levels[2].objs[6].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[6].leftright=1
- levels[2].objs[6].otype=1
- levels[2].objs[6].x=2768 //pixels not fracunits
- levels[2].objs[6].y=496
- levels[2].objs[7]={}
- levels[2].objs[7].cat=0 //category: 0=enemies 1=springs
- levels[2].objs[7].leftright=-1
- levels[2].objs[7].otype=0
- levels[2].objs[7].x=768 //pixels not fracunits
- levels[2].objs[7].y=172
- levels[2].objs[8]={}
- levels[2].objs[8].cat=0 //category: 0=enemies 1=springs
- levels[2].objs[8].leftright=-1
- levels[2].objs[8].otype=1
- levels[2].objs[8].x=1200 //pixels not fracunits
- levels[2].objs[8].y=416
- levels[2].objs[9]={}
- levels[2].objs[9].cat=0 //category: 0=enemies 1=springs
- levels[2].objs[9].leftright=-1
- levels[2].objs[9].otype=1
- levels[2].objs[9].x=1824 //pixels not fracunits
- levels[2].objs[9].y=624
- levels[2].objs[10]={}
- levels[2].objs[10].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[10].leftright=1
- levels[2].objs[10].otype=0
- levels[2].objs[10].x=3040 //pixels not fracunits
- levels[2].objs[10].y=496
- levels[2].objs[11]={}
- levels[2].objs[11].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[11].leftright=1
- levels[2].objs[11].otype=0
- levels[2].objs[11].x=3072 //pixels not fracunits
- levels[2].objs[11].y=496
- levels[2].objs[12]={}
- levels[2].objs[12].cat=0 //category: 0=enemies 1=springs
- levels[2].objs[12].leftright=-1
- levels[2].objs[12].otype=1
- levels[2].objs[12].x=2192 //pixels not fracunits
- levels[2].objs[12].y=384
- levels[2].objs[13]={}
- levels[2].objs[13].cat=0 //category: 0=enemies 1=springs
- levels[2].objs[13].leftright=1
- levels[2].objs[13].otype=1
- levels[2].objs[13].x=3648 //pixels not fracunits
- levels[2].objs[13].y=303
- levels[2].objs[14]={}
- levels[2].objs[14].cat=0 //category: 0=enemies 1=springs
- levels[2].objs[14].leftright=1
- levels[2].objs[14].otype=0
- levels[2].objs[14].x=4624 //pixels not fracunits
- levels[2].objs[14].y=287
- levels[2].objs[15]={}
- levels[2].objs[15].cat=0 //category: 0=enemies 1=springs
- levels[2].objs[15].leftright=1
- levels[2].objs[15].otype=0
- levels[2].objs[15].x=4672 //pixels not fracunits
- levels[2].objs[15].y=287
- levels[2].objs[16]={}
- levels[2].objs[16].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[16].leftright=1
- levels[2].objs[16].otype=1
- levels[2].objs[16].x=3728 //pixels not fracunits
- levels[2].objs[16].y=320
- levels[2].objs[17]={}
- levels[2].objs[17].cat=1 //category: 0=enemies 1=springs
- levels[2].objs[17].leftright=1
- levels[2].objs[17].otype=1
- levels[2].objs[17].x=4928 //pixels not fracunits
- levels[2].objs[17].y=320
- levels[2].levelend={}
- levels[2].levelend.x1=4720*FRACUNIT
- levels[2].levelend.y1=144*FRACUNIT
- levels[2].levelend.x2=4880*FRACUNIT
- levels[2].levelend.y2=304*FRACUNIT
- levels[2].levelend.event=5002 //executes once everyone is at the end
- //level 3
- levels[3].startx=0
- levels[3].starty=64
- levels[3].width=67
- levels[3].height=32
- levels[3].tiles = {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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,0,0,0,0,0,0,0,0,4,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,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,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,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,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,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15,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,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,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,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,15,15,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,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,1,2,1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,12,13,12,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,1,2,1,2,3,3,3,3,3,1,2,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,3,3,3,3,3,3,3,3,12,13,12,13,3,3,3,3,3,12,13,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,15,4,0,0,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,1,2,1,2,0,0,4,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,15,4,15,0,0,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,12,13,12,13,12,13,0,0,15,4,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,15,4,15,0,0,0,0,0,0,0,0,0,1,2,1,2,1,2,1,2,1,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,15,4,15,4,0,0,0,0,0,0,0,0,0,0,0,0,15,4,15,4,0,0,0,0,0,0,0,0,0,12,13,12,13,12,13,12,13,12,13,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,4,15,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,15,4,15,4,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,0,0,0,4,15,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,4,15,4,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,0,4,15,4,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,4,15,4,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,4,15,4,15,0,0,0,0,0,0,0,0,0,}
- levels[3].objamount=0
- levels[3].objs={}
- levels[3].objs[0]={}
- levels[3].objs[0].cat=0 //category: 0=enemies 1=springs
- levels[3].objs[0].leftright=-1
- levels[3].objs[0].otype=3
- levels[3].objs[0].x=576 //pixels not fracunits
- levels[3].objs[0].y=172
- levels[3].levelend={}
- levels[3].levelend.x1=512*FRACUNIT
- levels[3].levelend.y1=64*FRACUNIT
- levels[3].levelend.x2=(512*FRACUNIT)+128*FRACUNIT
- levels[3].levelend.y2=(64*FRACUNIT)+64*FRACUNIT
- levels[3].levelend.event=5001 //executes once everyone is at the end
- local function clamp(val,minn,maxx)
- if (val < minn)
- val=minn
- end
- if (val > maxx)
- val=maxx
- end
- return val
- end
- local function sign(val)
- local ret=1
- if (val < 0)
- ret=-1
- end
- return ret
- end
- //collision
- local function apsa_CreateHitbox(w,h) //creates a hitbox from the center
- local box={}
- box.w=w
- box.h=h //h
- return box
- end
- local function apsa_CreateHitboxCorner(x1,y1,x2,y2) //creates a hitbox from top left/bottom right
- local box={}
- box.w=abs(x1-x2)/2
- box.h=abs(y1-y2)/2 //h
- return box
- end
- /*local function apsa_HitboxCollide(box1,box2) //offsetless function
- local xdist=abs(box1.x - box2.x)
- local ydist=abs(box1.y - box2.y)
- local ret=false
- if (xdist < box1.w+box2.w and ydist < box1.h+box2.h)
- ret=true
- end
- return ret
- end*/
- local function apsa_HitboxCollide(box1,box2,x1,y1,x2,y2)
- local xdist=abs((x1) - (x2))
- local ydist=abs((y1) - (y2))
- local ret=false
- if (xdist < box1.w+box2.w and ydist < box1.h+box2.h)
- ret=true
- end
- return ret
- end
- local apsa_hitboxes = {}
- apsa_hitboxes[1] = apsa_CreateHitbox(12*FRACUNIT,16*FRACUNIT) //player hitbox!
- apsa_hitboxes[2] = apsa_CreateHitboxCorner(0,0,16*FRACUNIT,16*FRACUNIT) //tile box
- apsa_hitboxes[3] = apsa_CreateHitbox(15*FRACUNIT,17*FRACUNIT) //spring
- apsa_hitboxes[4] = apsa_CreateHitbox(32*FRACUNIT,32*FRACUNIT) //dragon
- local function apsa_PointOnScreen(x,y,radius)
- radius = radius or 32
- radius = radius*FRACUNIT
- local viewposf={}
- viewposf.x=0
- viewposf.y=0
- viewposf.w=640*FRACUNIT
- viewposf.h=400*FRACUNIT
- for player in players.iterate
- viewposf.x=(player.viewpos.x*FRACUNIT)
- viewposf.y=(player.viewpos.y*FRACUNIT)
- if (x >= viewposf.x-radius and y >= viewposf.y-radius and x <= viewposf.x+viewposf.w+radius and y <= viewposf.y+viewposf.h+radius)
- return true
- end
- end
- return false
- end
- local function apsa_PointInRectangle(px,py,x1,y1,x2,y2) //doesn't use hitboxes
- if (px >= x1 and py >= y1 and px <= x2 and py <= y2)
- return true
- end
- return false
- end
- local function apsa_NearPlayer(x,y,radius) //returns player that its near or false
- radius = radius or 32
- radius = radius*FRACUNIT
- for player in players.iterate
- if (player.obj ~= nil and player.obj.x >= x-radius and player.obj.y >= y-radius and player.obj.x <= x+radius and player.obj.y <= y+radius)
- return player.obj
- end
- end
- return false
- end
- local function apsa_EnemyGetHit(box,x,y) //returns damage dealt if hit false if not hit
- local i=1
- while (i <= 80)
- if (server.apsaattacks[i] ~= nil and apsa_HitboxCollide(box,apsa_hitboxes[server.apsaattacks[i].hitboxid],x,y,server.apsaattacks[i].x,server.apsaattacks[i].y))
- local dmg=server.apsaattacks[i].damage
- if (server.apsaattacks[i].otype == 0) //delete sauce
- server.apsaattacks[i]=nil //fuck it not moving this to use deleteattack
- end
- return dmg //this original gameboy is defective i want a refund
- end
- i = $1 + 1
- end
- return false
- end
- local function apsa_PlayerGetHit(x,y) //just returns true if you got hit
- local i=1
- while (i <= 45)
- if (server.apsaenemies[i] ~= nil and server.apsaenemies[i].canhurt and apsa_HitboxCollide(apsa_hitboxes[1],apsa_hitboxes[server.apsaenemies[i].hitboxid],x,y,server.apsaenemies[i].x,server.apsaenemies[i].y))
- return true
- end
- i = $1 + 1
- end
- return false
- end
- local function apsa_PlayerHitSpring(x,y) //returns false or id
- local i=1
- while (i <= 15)
- if (server.apsasprings[i] ~= nil and apsa_HitboxCollide(apsa_hitboxes[1],apsa_hitboxes[3],x,y,server.apsasprings[i].x,server.apsasprings[i].y))
- return i
- end
- i = $1 + 1
- end
- return false
- end
- local function apsa_PlaySFXNear(soundnum,x,y,radius) //plays sound for all players near
- radius = radius or 32
- radius = radius*FRACUNIT
- local viewposf={}
- viewposf.x=0
- viewposf.y=0
- viewposf.w=640*FRACUNIT
- viewposf.h=400*FRACUNIT
- for player in players.iterate
- viewposf.x=(player.viewpos.x*FRACUNIT)
- viewposf.y=(player.viewpos.y*FRACUNIT)
- if (x >= viewposf.x-radius and y >= viewposf.y-radius and x <= viewposf.x+viewposf.w+radius and y <= viewposf.y+viewposf.h+radius)
- S_StartSound(nil,soundnum,player)
- //S_StartSoundAtVolume(nil,soundnum,clamp(255-(R_PointToDist2(x,y,(viewposf.x+(320*FRACUNIT)),(viewposf.y+(200*FRACUNIT)))/FRACUNIT)/2,0,255),player)
- end
- end
- end
- //tile data
- local tiledata = {} //this array just stores which hitbox index this tile uses
- tiledata[1]=0 //if 0 no hitbox
- tiledata[2]=2 //box
- //ok i forgot about the above and i don't know if i actually used it so
- //whether you can collide with each tile
- local tilecol={true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,true,true,true,true,false,false}
- local function apsa_CollideTile(box,xoff,yoff) //checks for collision with a tile
- //this function written by yacker
- /*root: local startx = ((xoff-FRACUNIT)/16)/FRACUNIT
- root: uhh
- root: shouldn't this go
- root: to the top left
- root: of the collision box
- root: instead of x-1
- Yacker: no
- root: why
- Yacker: it goes-wait
- Yacker: idk how but fixing that has made collisions now register a pixel above where they should
- Yacker: and no matter what hacks i employ i literally can't fix it. not even changing the offset manually
- root: so making it actually work with the hitbox...breaks it
- Yacker: i mean, it always worked, just probably not as well as one would want
- Yacker: it seems to make x collision worse too
- Yacker: i think it works better when the code looks wrong
- Yacker: so just...use the wrong code...that works...somehow*/
- local i = 0
- // Determine our starting location, then go one left and up
- local startx = ((xoff-FRACUNIT)/16)/FRACUNIT
- local curtile = (((yoff-FRACUNIT)/16)/FRACUNIT)*levels[server.currentlevel].width+startx
- startx = (startx*FRACUNIT*16)-8*FRACUNIT
- local tx = startx
- local ty = ((yoff-FRACUNIT)/16)*16
- local fu16 = 16*FRACUNIT
- while (i < 9)
- if (levels[server.currentlevel].tiles[curtile] != 0 and tilecol[levels[server.currentlevel].tiles[curtile]] == true and apsa_HitboxCollide(box,apsa_hitboxes[2],xoff,yoff,tx,ty))
- return true
- end
- if (i == 2 or i == 5)
- tx = startx
- ty = $1 + fu16
- curtile = $1 - 2
- curtile = $1 + levels[server.currentlevel].width
- else
- curtile = $1 + 1
- tx = $1 + fu16
- end
- i = $1 + 1
- end
- return false
- end
- //input
- local vk = {}
- vk.up=1
- vk.down=2
- vk.left=3
- vk.right=4
- vk.jump=5
- vk.shoot=6
- local function apsa_PlayerInput(player)
- local i=0
- while (i < 8)
- player.inputsprev[i+1]=player.inputs[i+1]
- i = $1 + 1
- end
- if (player.cmd.sidemove < 0)
- player.inputs[vk.left]=true
- else
- player.inputs[vk.left]=false
- end
- if (player.cmd.sidemove > 0)
- player.inputs[vk.right]=true
- else
- player.inputs[vk.right]=false
- end
- if (player.cmd.forwardmove < 0)
- player.inputs[vk.down]=true
- else
- player.inputs[vk.down]=false
- end
- if (player.cmd.forwardmove > 0)
- player.inputs[vk.up]=true
- else
- player.inputs[vk.up]=false
- end
- player.inputs[vk.jump] = player.cmd.buttons & BT_JUMP
- player.inputs[vk.shoot] = player.cmd.buttons & BT_USE
- /*player.inputs.pressspin = player.cmd.buttons & BT_USE
- player.inputs.pressjump = player.cmd.buttons & BT_JUMP
- player.inputs.pressfire = player.cmd.buttons & BT_ATTACK
- player.inputs.pressfirenormal = player.cmd.buttons & BT_FIRENORMAL
- player.inputs.presstossflag = player.cmd.buttons & BT_TOSSFLAG
- player.inputs.presscamleft = player.cmd.buttons & BT_CAMLEFT
- player.inputs.presscamright = player.cmd.buttons & BT_CAMRIGHT
- player.inputs.pressnextweapon = player.cmd.buttons & BT_WEAPONNEXT*/
- end
- local function button_check(player,val)
- return player.inputsprev[val]
- end
- local function button_check_pressed(player,val)
- return (player.inputs[val] and not player.inputsprev[val])
- end
- local function button_check_released(player,val)
- return (not player.inputs[val] and player.inputsprev[val])
- end
- //RScript
- //local script="*5000<KEY<MSG<TXW1<STC255:000:000m<STC255:255:000e<STC000:255:000m<STC000:255:255e<STC000:000:255s<NOD<CLR<MS3<TXW1<TXS1LOL XD<NOD<CLO<MS2top kek <MSY128<WAI0020<MSY064<WAI0020<MSY255<WAI0020<MSY069<NOD<FRE<END"
- local script="*5000<MSG<INS13<INF13<WAI0200<INF00<INS12I'm Mr. Triangle. <WAI0060Recently,<WAI0015 my world"..string.char(13).."got <INS13taken over by an edgy cat man. <IMU<WAI0105<INW<CLR<INS12So I did what any sane person would..<WAI0070 "..string.char(13).."<INF01I got a job as a pizza guy. <WAI0090<CLRMy first day went in..<WAI0035 <INS13<INW<INF01<WAI0023<INW<INF02<WAI0023<INW<INF03<WAI0023<INW<INS00<WAI0023a direction. <WAI0075<CLRDay 2 was going better,<WAI0015 until.. <WAI0060<CLR<INS13<INF04<WAI0095<CLR<INS13<INF05HEY TRIANGLE, we gotta "..string.char(13).."SPECIAL ORDER HEEYUH. <WAI0070<CLRSome rich guy ordered.. <WAI0035"..string.char(13).."<INF07a CA<INF08VIA<INF07R PI<INF08ZZA<INF07! <INF08 <INF07<WAI0070<CLR<INF09That's disgusting. <WAI0075<CLR<INF05Yeah, but we're gettin' "..string.char(13).."<INF061000 DOLLARS for it. <WAI0090<CLR<INF10Damn. <WAI0060<CLR<INF05But..<WAI0035 30 minutes, or it's free. "..string.char(13).."IF YOU DON'T SKIDADDLE THERE "..string.char(13).."RIGHT NOW YA' FIRED <WAI0070 "..string.char(13).."Oh heres the address <WAI0060<CLR<INF12I won't dissapoint you, sir! <WAI0075<CLR<INF11With that, Mr. Triangle runs off. <WAI0090<CLR<INF05.<WAI0035.<WAI0035<INF06Heh,<WAI0015 he must think he's GETTIN "..string.char(13).."some of that dough. <WAI0090<CLR<STG<END"
- script = $1 .. " *5001<MSGLevel 1 Complete!<WAI0050<GTS2<END"
- script = $1 .. "*5002<KEY<MSGLevel 2 Complete!<WAI0050<PSU<WAI0010<PSU<WAI0007<PSU<WAI0005<PSU<WAI0045<CAM<WAI0120<CAM<GTS3<END"
- script = $1 .. "*5003<KEY<MSGAlright, finally here..<WAI0035<SPL<WAI0010<SPL<WAI0060<CLR..huh?!<WAI0035<SPD<WAI0045<PLJA dr<PFLagon? Are you kidding me?<WAI0035<FRE<BMU<END"
- script = $1 .. "*5004<KEY<WAI0090<INS22<INF00<SEN<WAI0070<INF01<MSGI wonder if that pizza guy's"..string.char(13).."dead yet- <INF02<WAI0010huh?!<WAI0055<CLRDammit, that robo-dragon"..string.char(13).."failed me.. <WAI0070<CLR<INF03Thought you could delay"..string.char(13).."me, didn't ya?"..string.char(13).."Now pay up. <WAI0095<CLR<INF04Agh...<WAI0080<CLR<INF05Alright, 1000 DOLLARS!<WAI0035!<WAI0035!<WAI0060 "..string.char(13).."...<INF06wait <WAI0035how do I get down? <WAI0020<INF07<WAI0005<INF08<WAI0060<CLRTHE END<WAI0135<EXL<CLR<FRE<END"
- local function RSC_Draw(v,stplyr,cam)
- /*local i=0
- v.drawString(8,16,"FUCK"..stplyr.messagelength)
- v.drawString(8,32,"FUCK2"..stplyr.scriptpos)
- v.drawString(8,48,"FUCK3"..stplyr.rscstate)
- while (i < stplyr.messagelength)
- v.drawString(8*i,32,stplyr.messagecontent[i].char)
- i = $1 + 1
- end*/
- local i=0
- local txpos=0
- local curline=0
- //var drewline=false
- //if (facepic !=0) {
- //draw_sprite(sprFacepics,facepic-1,32,248+16)
- //}
- while (i < server.messagelength-1)
- if (server.messagecontent[i].ln ~= curline)
- curline=server.messagecontent[i].ln
- txpos=0
- end
- //local txposreal=32+(68*(stplyr.facepic > 0))+txpos
- local txposreal=16+txpos
- local typos=server.msy+16+1+(16*curline)
- //text shake
- /*if (messagecontent[i,2]) {
- txposreal+=irandom_range(-1,1)
- typos+=irandom_range(-1,1)
- }*/
- //text wave
- /*if (messagecontent[i,3]) {
- txposreal+=3*cos(sine-0.45*i)
- typos+=3*sin(sine-0.45*i)
- }*/
- //draw_text_colour(32+(68*(facepic > 0))+txpos,248+16+1+(16*curline),messagecontent[i,0],c_black,c_black,c_black,c_black,1)
- //draw_text_colour(32+1+(68*(facepic > 0))+txpos,248+16+(16*curline),messagecontent[i,0],c_white,c_white,c_white,c_white,1)
- //draw_text_colour(view_xview+txposreal,view_yview+typos+1,messagecontent[i,0],c_black,c_black,c_black,c_black,1)
- //apsa_DrawCharSmall(txposreal,typos,stplyr.messagecontent[i].char,v,stplyr,cam)
- v.drawString(txposreal,typos,server.messagecontent[i].char)
- //draw_text_colour(view_xview+txposreal+1,view_yview+typos,messagecontent[i,0],messagecontent[i,1],messagecontent[i,1],messagecontent[i,1],messagecontent[i,1],1)
- //draw_text_colour(txposreal+1,typos,messagecontent[i,0],c_white,c_white,c_white,c_white,1)
- txpos = $1 + 8
- if (server.messagecontent[i].char == " ")
- txpos = $1 - 4
- end
- i = $1 + 1
- end
- //_
- if (server.rscstate == 2 and server.nodtimer&1 == 0 and i >= server.messagelength and i > 0)
- //local txposreal=32+(68*(facepic > 0))+txpos
- local txposreal=16+txpos
- local typos=server.msy+16+1+(16*curline);
- //text shake
- /*if (textshake) {
- txposreal+=irandom_range(-1,1)
- typos+=irandom_range(-1,1)
- }
- //text wave
- if (textwave) {
- txposreal+=3*cos(sine-0.45*(i))
- typos+=3*sin(sine-0.45*(i))
- }*/
- local unsc="_"
- //draw_text_colour(view_xview+txposreal,view_yview+typos+1,unsc,c_black,c_black,c_black,c_black,1)
- //draw_text_colour(view_xview+txposreal+1,view_yview+typos,unsc,c_white,c_white,c_white,c_white,1)
- end
- end
- //hud.add(RSC_Draw,"game")
- //tiles
- local cachedtiles = {}
- local function apsa_CacheTiles(v,stplyr,cam)
- local cti=1
- while (cti <= 20)
- cachedtiles[cti+1]=v.cachePatch("PDGT"..tostring(cti))
- cti = $1 + 1
- end
- cachedtiles[1]=0
- end
- //define sprites
- local apsa_sprites = {}
- apsa_sprites[1] = {}
- apsa_sprites[1].name="MRTS" //stand (lol xd le funny " jo joek " am i rite ? smash that like buton 4 mor funny " may may " ' s !)
- apsa_sprites[1].len=1 //animation length
- apsa_sprites[2] = {}
- apsa_sprites[2].name="MRTW" //walk
- apsa_sprites[2].len=4
- apsa_sprites[3] = {}
- apsa_sprites[3].name="MRTJ" //jump
- apsa_sprites[3].len=2 //frame 1=jump 2=fall
- apsa_sprites[4] = {}
- apsa_sprites[4].name="SAUC" //sos
- apsa_sprites[4].len=2
- apsa_sprites[5] = {}
- apsa_sprites[5].name="SOSU" //sauc (up)
- apsa_sprites[5].len=2
- apsa_sprites[6] = {}
- apsa_sprites[6].name="MRTF" //fire sauce
- apsa_sprites[6].len=2
- apsa_sprites[7] = {}
- apsa_sprites[7].name="MRTU" //fire sauce up
- apsa_sprites[7].len=2
- apsa_sprites[8] = {}
- apsa_sprites[8].name="PGCR" //circle
- apsa_sprites[8].len=4
- apsa_sprites[9] = {}
- apsa_sprites[9].name="PGEX" //esplod
- apsa_sprites[9].len=3
- apsa_sprites[10] = {}
- apsa_sprites[10].name="PGHU" //HUD
- apsa_sprites[10].len=2
- apsa_sprites[11] = {}
- apsa_sprites[11].name="PGHP" //HUD Pizza
- apsa_sprites[11].len=1
- apsa_sprites[12] = {}
- apsa_sprites[12].name="PGIT" //intro mr. triangle (the git)
- apsa_sprites[12].len=2
- apsa_sprites[13] = {}
- apsa_sprites[13].name="PGIN" //intro
- apsa_sprites[13].len=14
- apsa_sprites[14] = {}
- apsa_sprites[14].name="PGCG" //circlegunner
- apsa_sprites[14].len=3
- apsa_sprites[15] = {}
- apsa_sprites[15].name="PGCB" //circlegunner bullet
- apsa_sprites[15].len=1
- apsa_sprites[16] = {}
- apsa_sprites[16].name="PGSP" //spring
- apsa_sprites[16].len=1
- apsa_sprites[17] = {}
- apsa_sprites[17].name="PGDS" //nintendo ds (diagonal spring)
- apsa_sprites[17].len=1
- apsa_sprites[18] = {}
- apsa_sprites[18].name="PGMS" //mansion
- apsa_sprites[18].len=2
- apsa_sprites[19] = {}
- apsa_sprites[19].name="PGMB" //mansion big (for stage 3 background)
- apsa_sprites[19].len=1
- apsa_sprites[20] = {}
- apsa_sprites[20].name="PGDG" //dragon
- apsa_sprites[20].len=2
- apsa_sprites[21] = {}
- apsa_sprites[21].name="PGFR" //dragon fire
- apsa_sprites[21].len=2
- apsa_sprites[22] = {}
- apsa_sprites[22].name="PGEN" //ending
- apsa_sprites[22].len=9
- //drawing
- local function apsa_DrawSprite(sprite,frame,x,y,lr,v,stplyr,cam)
- //frame is in fracunits
- frame = ($1 / FRACUNIT) % apsa_sprites[sprite].len
- local str=apsa_sprites[sprite].name..tostring(frame)
- //if lr is -1 add l if 1 add r (maybe it should default to r if 0 or above? idk)
- if (lr == -1)
- str = $1.."L"
- elseif (lr == 1)
- str = $1.."R"
- end
- local patch=v.cachePatch(str)
- v.drawScaled(x*FRACUNIT/2,y*FRACUNIT/2,FRACUNIT/2,patch)
- end
- local function apsa_DrawSpriteView(sprite,frame,x,y,lr,v,stplyr,cam,color)
- color = color or v.getColormap(0,0)
- //frame is in fracunits
- frame = ($1 / FRACUNIT) % apsa_sprites[sprite].len
- local str=apsa_sprites[sprite].name..tostring(frame)
- //if lr is -1 add l if 1 add r (maybe it should default to r if 0 or above? idk)
- if (lr == -1)
- str = $1.."L"
- elseif (lr == 1)
- str = $1.."R"
- end
- local patch=v.cachePatch(str)
- v.drawScaled((x-(stplyr.viewpos.x))*FRACUNIT/2,(y-(stplyr.viewpos.y))*FRACUNIT/2,FRACUNIT/2,patch,0,color)
- end
- local function apsa_DrawSpriteViewScaled(sprite,frame,x,y,lr,v,stplyr,cam,scale,color)
- color = color or v.getColormap(0,0)
- x = $1 * 32768
- y = $1 * 32768
- //frame is in fracunits
- frame = ($1 / FRACUNIT) % apsa_sprites[sprite].len
- local str=apsa_sprites[sprite].name..tostring(frame)
- //if lr is -1 add l if 1 add r (maybe it should default to r if 0 or above? idk)
- if (lr == -1)
- str = $1.."L"
- elseif (lr == 1)
- str = $1.."R"
- end
- local patch=v.cachePatch(str)
- v.drawScaled(x-(stplyr.viewpos.x*32768),y-(stplyr.viewpos.y*32768),scale,patch,0,color)
- end
- local function apsa_DrawTiles(v,stplyr,cam) //edited by yacker to work with the view
- if (cachedtiles[1] == nil)
- apsa_CacheTiles(v,stplyr,cam)
- end
- local i=0
- //local len=levels[server.currentlevel].width*levels[server.currentlevel].height
- local xits = 41
- local yits = 26
- local xx=0
- local yy=0
- local drawx = -(stplyr.viewpos.x) % 16
- local storex = drawx
- local drawy = -(stplyr.viewpos.y) % 16
- local curtile=0
- local tile = ((stplyr.viewpos.y/16)*levels[server.currentlevel].width)+(stplyr.viewpos.x/16)+1
- local starttile = tile
- while (i < yits)
- local i2 = 0
- while (i2 < xits)
- curtile=levels[server.currentlevel].tiles[tile]
- if (curtile ~= 0)
- v.drawScaled(drawx*FRACUNIT/2,drawy*FRACUNIT/2,FRACUNIT/2,cachedtiles[curtile+1])
- end
- drawx = $1 + 16
- tile = $1 + 1
- i2 = $1 + 1
- end
- tile = starttile + levels[server.currentlevel].width
- starttile = tile
- drawy = $1 + 16
- drawx = storex
- i = $1 + 1
- end
- end
- local function apsa_DrawStringSmallCenter(x,y,str,v,stplyr,cam)
- //because srb2 vanilla text machine broke
- local w=0
- local i=1
- //calculate width
- while (i <= string.len(str))
- if (string.sub(str,i,i) == " ")
- w = $1 + 4
- else
- w = $1 + 8
- end
- i = $1 + 1
- end
- x = $1 - (w/2)
- i=1
- local ltr=""
- local ltrg=0
- local chr=""
- local byte=0
- while (i <= string.len(str))
- chr=string.sub(str,i,i)
- if (chr ~= " ")
- byte=string.byte(chr)
- if (byte < 100)
- ltr="0"..tostring(byte)
- else
- ltr=tostring(byte)
- end
- ltrg=v.cachePatch("STCFN"..ltr)
- v.drawScaled(x*FRACUNIT/2,y*FRACUNIT/2,FRACUNIT/2,ltrg)
- x = $1 + 8
- else
- x = $1 + 4
- end
- i = $1 + 1
- end
- end
- local function apsa_DrawCharSmall(x,y,str,v,stplyr,cam)
- local ltr=""
- local ltrg=0
- local byte=0
- if (str ~= " ")
- byte=string.byte(string.sub(str,1,1))
- //print(byte)
- if (byte < 100)
- ltr="0"..tostring(byte)
- else
- ltr=tostring(byte)
- end
- ltrg=v.cachePatch("STCFN"..ltr)
- v.drawScaled(x*FRACUNIT/2,y*FRACUNIT/2,FRACUNIT/2,ltrg)
- end
- end
- local function apsa_DrawPlayers(v,stplyr,cam)
- local plrcol=v.getColormap(-1,SKINCOLOR_RED) //default
- for player in players.iterate
- //local spr=v.cachePatch("AMPS_R")
- //v.draw(player.obj.x/FRACUNIT,player.obj.y/FRACUNIT,spr)
- //v.drawFill((player.obj.x/FRACUNIT)-12,(player.obj.y/FRACUNIT)-16,24,32,128)
- //apsa_DrawSprite(1,65535,player.obj.x/FRACUNIT,player.obj.y/FRACUNIT,1,v,stplyr,cam)
- //apsa_DrawSprite(player.obj.spriteindex,player.obj.frame,player.obj.x/FRACUNIT,player.obj.y/FRACUNIT,player.obj.leftright,v,stplyr,cam)
- //draw player name and change player color if multiplayer
- if (server.pdgstate == 0 and not player.dead)
- if (multiplayer)
- //v.drawString((player.obj.x/FRACUNIT)-stplyr.viewpos.x,((player.obj.y/FRACUNIT)-28)-stplyr.viewpos.y,player.name,V_NOSCALEPATCH,"center")
- apsa_DrawStringSmallCenter((player.obj.x/FRACUNIT)-stplyr.viewpos.x,((player.obj.y/FRACUNIT)-28)-stplyr.viewpos.y,player.name,v,stplyr,cam)
- plrcol=v.getColormap(-1,player.mo.color)
- end
- if ((player.tempinvin == 0) or (player.tempinvin ~= 0 and player.tempinvin&1 == 0))
- apsa_DrawSpriteView(player.obj.spriteindex,player.obj.frame,player.obj.x/FRACUNIT,(player.obj.y/FRACUNIT)-2,player.obj.leftright,v,stplyr,cam,plrcol)
- end
- end
- //v.drawString(0,0,"FUCKING Y SHIT:"..tostring(player.obj.y))
- //v.drawString(0,16,"FUCKING YSPD SHIT:"..tostring(player.obj.yspeed))
- end
- end
- //object draw functions
- local objfuncs = {}
- objfuncs.effectcreate = {}
- objfuncs.enemycreate = {}
- objfuncs.attackcreate = {}
- objfuncs.springcreate = {}
- objfuncs.effectstep = {}
- objfuncs.enemystep = {}
- objfuncs.attackstep = {}
- //no spring step because..they don't need to run code every frame
- objfuncs.effectdraw = {}
- objfuncs.enemydraw = {}
- objfuncs.attackdraw = {}
- objfuncs.springdraw = {}
- //attacks
- objfuncs.attackdraw[0] = function(obj,v,stplyr,cam)
- if (obj.up)
- apsa_DrawSpriteView(5,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,0,v,stplyr,cam)
- else
- apsa_DrawSpriteView(4,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- end
- end
- //enemies
- objfuncs.enemydraw[0] = function(obj,v,stplyr,cam)
- apsa_DrawSpriteView(8,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- if (obj.hurttimer > 0) //draw flash
- apsa_DrawSpriteView(8,2*FRACUNIT,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- end
- end
- objfuncs.enemydraw[1] = function(obj,v,stplyr,cam)
- if (obj.hurttimer == 0)
- apsa_DrawSpriteView(14,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- else
- apsa_DrawSpriteView(14,2*FRACUNIT,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- end
- end
- objfuncs.enemydraw[2] = function(obj,v,stplyr,cam)
- apsa_DrawSpriteView(15,0,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- end
- objfuncs.enemydraw[3] = function(obj,v,stplyr,cam) //dragon
- if (obj.hurttimer % 2 == 0)
- apsa_DrawSpriteView(obj.sprite,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- end
- end
- objfuncs.enemydraw[4] = function(obj,v,stplyr,cam) //dragon bullet
- apsa_DrawSpriteView(21,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- end
- //effects
- objfuncs.effectdraw[0] = function(obj,v,stplyr,cam)
- apsa_DrawSpriteView(9,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,0,v,stplyr,cam)
- end
- //springs
- objfuncs.springdraw[0] = function(obj,v,stplyr,cam)
- apsa_DrawSpriteView(16,0,obj.x/FRACUNIT,obj.y/FRACUNIT,0,v,stplyr,cam)
- end
- objfuncs.springdraw[1] = function(obj,v,stplyr,cam)
- apsa_DrawSpriteView(17,0,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
- end
- local function apsa_DrawObjects(v,stplyr,cam)
- local i=1
- while (i <= 80)
- if (server.apsaattacks[i] ~= nil)
- objfuncs.attackdraw[server.apsaattacks[i].otype](server.apsaattacks[i],v,stplyr,cam)
- end
- i = $1 + 1
- end
- i=1
- while (i <= 45)
- if (server.apsaenemies[i] ~= nil)
- objfuncs.enemydraw[server.apsaenemies[i].otype](server.apsaenemies[i],v,stplyr,cam)
- end
- i = $1 + 1
- end
- i=1
- while (i <= 45)
- if (server.apsaeffects[i] ~= nil)
- objfuncs.effectdraw[server.apsaeffects[i].otype](server.apsaeffects[i],v,stplyr,cam)
- end
- i = $1 + 1
- end
- i=1
- while (i <= 15)
- if (server.apsasprings[i] ~= nil)
- objfuncs.springdraw[server.apsasprings[i].otype](server.apsasprings[i],v,stplyr,cam)
- end
- i = $1 + 1
- end
- end
- //draw_tiled made by yacker
- local function draw_tiled(v,camx,camy,patch,width,height,flags)
- flags = flags or 0
- local i = 0
- local xits
- local yits
- // Support different draw sizes
- if (flags & V_SMALLSCALEPATCH)
- xits = FixedCeil(FixedDiv(640*FRACUNIT,width*FRACUNIT))/FRACUNIT+1
- yits = FixedCeil(FixedDiv(400*FRACUNIT,height*FRACUNIT))/FRACUNIT+1
- else
- xits = FixedCeil(FixedDiv(320*FRACUNIT,width*FRACUNIT))/FRACUNIT+1
- yits = FixedCeil(FixedDiv(200*FRACUNIT,height*FRACUNIT))/FRACUNIT+1
- end
- // Modulo our start position by width, then subtract width again so we get the correct place
- camx = ((-$1) % width)
- // Again with height
- camy = ((-$1) % height)
- // And now we just iterate drawing
- local drawx = camx
- local drawy = camy
- while (i < yits)
- local i2 = 0
- while (i2 < xits)
- v.drawScaled(drawx*FRACUNIT/2,drawy*FRACUNIT/2,FRACUNIT/2,patch,flags)
- drawx = $1 + width
- i2 = $1 + 1
- end
- drawx = camx
- i = $1 + 1
- drawy = $1 + height
- end
- end
- local function draw_tiled_hor(v,camx,camy,patch,width,height,flags)
- flags = flags or 0
- local i = 0
- local xits
- // Support different draw sizes
- if (flags & V_SMALLSCALEPATCH)
- xits = FixedCeil(FixedDiv(640*FRACUNIT,width*FRACUNIT))/FRACUNIT+1
- else
- xits = FixedCeil(FixedDiv(320*FRACUNIT,width*FRACUNIT))/FRACUNIT+1
- end
- // Modulo our start position by width
- camx = ((-$1) % width)
- // And now we just iterate drawing
- while (i < xits)
- v.drawScaled(camx*FRACUNIT/2,camy*FRACUNIT/2,FRACUNIT/2,patch,flags)
- camx = $1 + width
- i = $1 + 1
- end
- end
- local function apsa_DrawHUD(player,x,leftright,v,stplyr,cam)
- apsa_DrawSprite(10,0,x,0,leftright,v,stplyr,cam)
- local xx=4+16+10
- local i=0
- if (splitscreen and player == players[1])
- xx=640-(4+16+10)
- while (i < player.hp)
- apsa_DrawSprite(11,0,xx-(18*i),35,0,v,stplyr,cam)
- i = $1 + 1
- end
- else
- while (i < player.hp)
- apsa_DrawSprite(11,0,xx+(18*i),35,0,v,stplyr,cam)
- i = $1 + 1
- end
- end
- end
- local function TestDraw(v, stplyr, cam)
- //v.drawString(8,8,"ass")
- if (mapheaderinfo[gamemap].pdglevel == nil) //map header variable
- return
- end
- //draw bg
- if (server.pdgstate == 0)
- local bg=v.cachePatch("PDGBG1")
- v.draw(0,0,bg)
- bg=v.cachePatch("PDGBG2")
- v.draw(0,0,bg)
- bg=v.cachePatch("PDGBG3")
- draw_tiled_hor(v,(FixedMul(stplyr.viewpos.x*FRACUNIT,39321)/FRACUNIT)/7,64-(FixedMul(stplyr.viewpos.y*FRACUNIT,39321)/FRACUNIT)/7,bg,128,192,flags)
- bg=v.cachePatch("PDGBG4")
- draw_tiled_hor(v,(FixedMul(stplyr.viewpos.x*FRACUNIT,52428)/FRACUNIT)/5,128-(FixedMul(stplyr.viewpos.y*FRACUNIT,52428)/FRACUNIT)/5,bg,128,224,flags)
- bg=v.cachePatch("PDGBG5")
- draw_tiled_hor(v,(FixedMul(stplyr.viewpos.x*FRACUNIT,58982)/FRACUNIT)/3,192-(FixedMul(stplyr.viewpos.y*FRACUNIT,58982)/FRACUNIT)/3,bg,128,192,flags)
- if (server.currentlevel == 1)
- apsa_DrawStringSmallCenter(128-stplyr.viewpos.x,(160)-stplyr.viewpos.y,"Press Spin to Shoot!",v,stplyr,cam)
- end
- //draw mansion bg
- if (server.currentlevel == 2)
- apsa_DrawSprite(18,(leveltime/5)*FRACUNIT,2250-(FixedMul(stplyr.viewpos.x*FRACUNIT,65536)/FRACUNIT)/3,192-(FixedMul(stplyr.viewpos.y*FRACUNIT,58982)/FRACUNIT)/2,0,v,stplyr,cam)
- end
- if (server.currentlevel == 3)
- apsa_DrawSpriteViewScaled(19,0,528,336,0,v,stplyr,cam,2*FRACUNIT)
- end
- //draw game stuff
- apsa_DrawTiles(v,stplyr,cam)
- apsa_DrawObjects(v,stplyr,cam)
- apsa_DrawPlayers(v,stplyr,cam)
- if (not splitscreen)
- apsa_DrawHUD(stplyr,0,-1,v,stplyr,cam)
- else
- apsa_DrawHUD(players[0],0,-1,v,stplyr,cam)
- apsa_DrawHUD(players[1],448,1,v,stplyr,cam)
- end
- end
- if (server.pdgstate >= 1)
- v.drawFill(0,0,320,200,31)
- if (server.introsprite ~= 0)
- apsa_DrawSprite(server.introsprite,server.introframe*FRACUNIT,320,200,0,v,stplyr,cam)
- end
- if (server.introflash > 0)
- v.drawFill(0,0,320,200,0)
- end
- end
- RSC_Draw(v,stplyr,cam)
- end
- //BLEACH
- //objects
- local function apsa_CreateTriangleEngineObject() //triangle engine = platformer code (which ironically has no triangles in this port)
- local obj={}
- obj.x=0
- obj.y=0
- obj.xspeed=0
- obj.yspeed=0
- obj.momu=0
- obj.momd=0
- obj.moml=0
- obj.momr=0
- obj.ystore=0
- obj.executeagain=0
- obj.onland=0
- obj.leftright=1
- return obj
- end
- local function apsa_TriangleEngineLR(obj)
- while (obj.executeagain == 1)
- if (obj.momr > 0 and not apsa_CollideTile(apsa_hitboxes[1],obj.x+FRACUNIT,obj.y))
- obj.x = $1 + FRACUNIT
- obj.momr = $1 - FRACUNIT
- end
- if (obj.moml > 0 and not apsa_CollideTile(apsa_hitboxes[1],obj.x-FRACUNIT,obj.y))
- obj.x = $1 - FRACUNIT
- obj.moml = $1 - FRACUNIT
- end
- if (obj.momr <= 0 and obj.moml <= 0)
- obj.executeagain=0
- end
- if (apsa_CollideTile(apsa_hitboxes[1],obj.x+FRACUNIT,obj.y) and obj.xspeed > 0)
- obj.xspeed=0
- obj.momr=0
- return true
- end
- if (apsa_CollideTile(apsa_hitboxes[1],obj.x-FRACUNIT,obj.y) and obj.xspeed < 0)
- obj.xspeed=0
- obj.moml=0
- return true
- end
- end
- end
- local function apsa_TriangleEngineUD(obj)
- while (obj.executeagain == 1)
- if (obj.momu > 0 and not apsa_CollideTile(apsa_hitboxes[1],obj.x,obj.y-FRACUNIT))
- obj.y = $1 - FRACUNIT
- obj.momu = $1 - FRACUNIT
- end
- if (obj.momd > 0 and not apsa_CollideTile(apsa_hitboxes[1],obj.x,obj.y+FRACUNIT))
- obj.y = $1 + FRACUNIT
- obj.momd = $1 - FRACUNIT
- end
- if (obj.momu <= 0 and obj.momd <= 0)
- obj.executeagain=0
- end
- if (apsa_CollideTile(apsa_hitboxes[1],obj.x,obj.y-FRACUNIT))
- obj.yspeed=0
- obj.momu=0
- return true
- end
- if (apsa_CollideTile(apsa_hitboxes[1],obj.x,obj.y+FRACUNIT))
- obj.yspeed=0
- obj.momd=0
- obj.onland=true
- return true
- else
- obj.onland=false
- end
- end
- end
- local function apsa_TriangleEngineStep(obj)
- //x momentum
- if (obj.xspeed > 0)
- obj.momr = $1 + obj.xspeed
- end
- if (obj.xspeed < 0)
- obj.moml = $1 - obj.xspeed
- end
- if (obj.xspeed == 0)
- obj.momr=0
- obj.moml=0
- end
- //y momentum
- if (obj.yspeed > 0)
- obj.momd = $1 + obj.yspeed
- end
- if (obj.yspeed < 0)
- obj.momu = $1 - obj.yspeed
- end
- if (obj.yspeed == 0)
- obj.momu=0
- obj.momd=0
- end
- obj.ystore=obj.y
- apsa_TriangleEngineLR(obj)
- obj.executeagain=1
- apsa_TriangleEngineUD(obj)
- obj.executeagain=1
- obj.yspeed = $1 + 12285//7167 //triangle engine gravity (adjusted for 35fps)
- if (obj.yspeed > 6*FRACUNIT)
- obj.yspeed = 6*FRACUNIT
- end
- end
- local function DeleteEffect(id)
- server.apsaeffects[id] = nil
- end
- local function DeleteEnemy(id)
- server.apsaenemies[id] = nil
- end
- local function DeleteAttack(id)
- server.apsaattacks[id] = nil
- end
- //create/step functions
- //attacks
- objfuncs.attackcreate[0] = function() //sauce
- local obj={}
- obj.x=0
- obj.y=0
- obj.timer=55
- obj.leftright=1
- obj.up=0
- obj.frame=0
- obj.damage=FRACUNIT
- obj.hitboxid=2 //for if i add special attack
- return obj
- end
- //enemy creates
- objfuncs.enemycreate[0] = function() //circle
- local obj=apsa_CreateTriangleEngineObject()
- obj.moving=false //used so friction only happens when it stops trying to move
- obj.canhurt=true
- obj.frame=0
- obj.hurttimer = 0
- obj.hp = 2*FRACUNIT
- obj.hitboxid=1
- return obj
- end
- objfuncs.enemycreate[1] = function() //circlegunner
- local obj=apsa_CreateTriangleEngineObject()
- obj.leftright=-1
- obj.canhurt=false
- obj.frame=0
- obj.hurttimer = 0
- obj.hp = 2*FRACUNIT
- obj.hitboxid=1
- obj.shoottimer=0
- obj.state=0
- return obj
- end
- objfuncs.enemycreate[2] = function() //circlegunner bullet
- local obj=apsa_CreateTriangleEngineObject()
- obj.leftright=-1
- obj.canhurt=true
- obj.timer=0
- obj.hitboxid=2
- return obj
- end
- objfuncs.enemycreate[3] = function() //dragon
- local obj={}
- obj.x=0
- obj.y=0
- obj.leftright=-1
- obj.canhurt=true
- obj.timer=0
- obj.hitboxid=2
- obj.sprite=20
- obj.frame=0
- obj.framespeed=6
- obj.ft = 0
- obj.state = 0
- obj.target = 0
- obj.targx = 0
- obj.targy = 0
- obj.hp = 16
- obj.hurttimer = 0
- obj.fire = {}
- obj.fireids = {}
- obj.fireradius = 0
- obj.targetradius = 0
- obj.firerot = 0
- obj.targetrot = 0
- obj.radiusstate = 0 // whether to grow larger or shrink
- obj.rotstate = 0 // ditto
- obj.radiustime = 0 // smooth transition between radius states
- obj.rottime = 0 // ditto
- return obj
- end
- objfuncs.enemycreate[4] = function() //dragon bullet (should aim for player)
- local obj={}
- obj.x=0
- obj.y=0
- obj.xsp = 0
- obj.ysp = 0
- obj.leftright=0
- obj.canhurt=true
- obj.timer=0
- obj.hitboxid=2
- obj.sprite=21
- obj.frame=0
- obj.framespeed=0
- return obj
- end
- //effect creates
- objfuncs.effectcreate[0] = function() //esplosion
- local obj={}
- obj.x=0
- obj.y=0
- obj.xspeed=0
- obj.yspeed=0
- obj.frame=0
- return obj
- end
- //spring creates
- objfuncs.springcreate[0] = function() //spring
- local obj={}
- obj.x=0
- obj.y=0
- obj.leftright=0
- obj.otype=0
- return obj
- end
- objfuncs.springcreate[1] = function() //diagonal spring
- local obj={}
- obj.x=0
- obj.y=0
- obj.leftright=1
- obj.otype=0
- return obj
- end
- //create object functions
- //enemy/other objects
- local function CreateEnemy(enemytype,x,y,leftright) //x and y are pixels not fracunits
- //0=circle 1=circlegunner (high quality shapes)
- leftright = leftright or -1
- local i=1
- local succ=false //succ-essful (succ)
- while (i <= 45)
- if (server.apsaenemies[i] == nil)
- server.apsaenemies[i] = {}
- server.apsaenemies[i] = objfuncs.enemycreate[enemytype]()
- server.apsaenemies[i].leftright=leftright
- server.apsaenemies[i].x=x*FRACUNIT
- server.apsaenemies[i].y=y*FRACUNIT
- server.apsaenemies[i].otype=enemytype
- succ=i
- i=46
- end
- i = $1 + 1
- end
- if (not succ) //ANGERY
- //print("ran out of space for enemies fire root")
- end
- return succ
- end
- local function CreateEffect(effecttype,x,y,leftright) //x and y are pixels not fracunits
- //0=sauce splash 1=explosion
- leftright = leftright or -1
- local i=1
- local succ=false //succ-essful (succ)
- while (i <= 45)
- if (server.apsaeffects[i] == nil)
- server.apsaeffects[i] = {}
- server.apsaeffects[i] = objfuncs.effectcreate[effecttype]()
- server.apsaeffects[i].leftright=leftright
- server.apsaeffects[i].x=x*FRACUNIT
- server.apsaeffects[i].y=y*FRACUNIT
- server.apsaeffects[i].otype=effecttype
- succ=i
- i=46
- //print("CREATED ESPLOD AT "..i.." "..server.apsaeffects[i])
- end
- i = $1 + 1
- end
- if (not succ) //ANGERY
- //print("oh boy that sauce won't have as many splashes fire root")
- end
- return succ
- end
- local function CreateAttack(attacktype,x,y,leftright) //x and y are pixels not fracunits
- //0=sauce 1=blast
- leftright = leftright or -1
- local i=1
- local succ=false //succ-essful (succ)
- while (i <= 80)
- if (server.apsaattacks[i] == nil)
- server.apsaattacks[i] = objfuncs.attackcreate[attacktype]()
- server.apsaattacks[i].leftright=leftright
- server.apsaattacks[i].x=x*FRACUNIT
- server.apsaattacks[i].y=y*FRACUNIT
- server.apsaattacks[i].otype=attacktype
- succ=i
- i=81
- end
- i = $1 + 1
- end
- if (not succ) //ANGERY
- print("really? you really got enough players together to max out the shot array by attacking all at once? i'm not even mad i'm just impressed. don't fire root")
- end
- return succ
- end
- local function CreateSpring(springtype,x,y,leftright) //x and y are pixels not fracunits
- //0=sauce 1=blast
- leftright = leftright or -1
- local i=1
- local succ=false //succ-essful (succ)
- while (i <= 15)
- if (server.apsasprings[i] == nil)
- server.apsasprings[i] = objfuncs.springcreate[springtype]()
- server.apsasprings[i].leftright=leftright
- server.apsasprings[i].x=x*FRACUNIT
- server.apsasprings[i].y=y*FRACUNIT
- server.apsasprings[i].otype=springtype
- succ=i
- i=81
- end
- i = $1 + 1
- end
- if (not succ) //ANGERY
- print("theres the problem! too many springs! you know what they say..all bounce pads bounce lads!")
- end
- return succ
- end
- //game
- local function apsa_DeletePlayers()
- for player in players.iterate
- player.viewpos.x=0
- player.viewpos.y=0
- player.obj={}
- end
- end
- local function apsa_ResetPlayers()
- for player in players.iterate
- player.obj.x=levels[server.currentlevel].startx*FRACUNIT
- player.obj.y=levels[server.currentlevel].starty*FRACUNIT
- player.obj.shoottimer=0
- player.obj.shootup=0
- player.obj.spriteindex=1
- player.obj.frame=0
- player.obj.framespeed=0
- player.viewpos.x=0
- player.viewpos.y=0
- player.campos.x=0
- player.campos.y=0
- player.dead=false
- player.deathtimer=0
- player.hp=4
- player.tempinvin=0
- player.levelcomplete=false
- end
- end
- local function apsa_InitObjectArrays()
- server.apsaeffects = {} //explosions, sos splashes and stuff (45)
- server.apsaenemies = {} //this includes enemy bullets (45)
- server.apsaattacks = {} //player attacks (3 bullets on screen + blast * ..lets say 20 because >32 players top kek = 80 slots)
- server.apsasprings = {} //15
- end
- local function apsa_LoadLevelObjects()
- /* levels[1].objs={}
- levels[1].objamount=1
- levels[1].objs[0]={}
- levels[1].objs[0].otype=0
- levels[1].objs[0].x=64 //pixels not fracunits
- levels[1].objs[0].y=128*/
- local i=0
- while (i < levels[server.currentlevel].objamount)
- if (levels[server.currentlevel].objs[i].cat == 0)
- CreateEnemy(levels[server.currentlevel].objs[i].otype,levels[server.currentlevel].objs[i].x,levels[server.currentlevel].objs[i].y,levels[server.currentlevel].objs[i].leftright)
- else
- CreateSpring(levels[server.currentlevel].objs[i].otype,levels[server.currentlevel].objs[i].x,levels[server.currentlevel].objs[i].y,levels[server.currentlevel].objs[i].leftright)
- end
- i = $1 + 1
- end
- end
- local function apsa_GotoLevel(level)
- server.currentlevel=level
- server.pdgstate=0
- server.lvlcomplete=false
- apsa_InitObjectArrays()
- apsa_LoadLevelObjects()
- apsa_ResetPlayers()
- if (level == 1)
- S_ChangeMusic("SUNS")
- end
- if (level == 3)
- server.bossevent=true
- server.movementmode=1
- S_StopMusic()
- end
- for player in players.iterate
- player.hp=4
- end
- end
- //RSCRIPT FUCK SHIT ASS COCK FUCK BLEACH TIDE PODS
- local function RSC_ClearMsg()
- //clear message
- local i=0
- while (i <= 128)
- server.messagecontent[i].char=""
- server.messagecontent[i].col=server.rscript_defcolor
- server.messagecontent[i].shk=0
- server.messagecontent[i].wav=0
- server.messagecontent[i].ln=0
- i = $1 + 1
- end
- server.textcolor=server.rscript_defcolor
- server.textshake=false
- server.textwave=false
- server.textline=0
- server.messagelength=1
- server.messagepos=0
- end
- local function RSC_Command()
- local ret=false
- local char=string.sub(script,server.scriptpos,server.scriptpos)//string_char_at(script,scriptpos)
- //print(player.scriptpos)
- //print(char)
- if (char == "<")
- ret=true
- server.scriptpos= $1 + 1
- local rsccommand=string.sub(script,server.scriptpos,server.scriptpos+2)//string_copy(script,scriptpos,3);
- //print(rsccommand.."AA")
- server.scriptpos = $1 + 3
- //check for commands here
- if (rsccommand == "KEY")
- server.movementmode=1
- //print("KEY")
- elseif (rsccommand == "FRE")
- server.movementmode=0
- elseif (rsccommand == "MSG")
- server.messageon=1
- //player.msy=248
- server.msy=120
- server.rscinterval=0
- RSC_ClearMsg()
- //print("MSG")
- elseif (rsccommand == "MS2")
- server.messageon=1
- server.msy=248
- server.rscinterval=0
- RSC_ClearMsg()
- elseif (rsccommand == "MS3")
- server.messageon=1
- server.msy=16
- server.rscinterval=0
- RSC_ClearMsg()
- elseif (rsccommand == "NOD")
- server.rscstate=2
- server.rscinterval=0
- elseif (rsccommand == "CLR")
- RSC_ClearMsg()
- elseif (rsccommand == "WAI")
- server.rscstate=3
- server.waittimer=tonumber(string.sub(script,server.scriptpos,server.scriptpos+3))
- //print("<WAI "..server.waittimer)
- server.scriptpos = $1 + 4
- elseif (rsccommand == "INS") //Intro Sprite
- server.introsprite=tonumber(string.sub(script,server.scriptpos,server.scriptpos+1))
- server.scriptpos = $1 + 2
- elseif (rsccommand == "INF") //Intro Frame
- server.introframe=tonumber(string.sub(script,server.scriptpos,server.scriptpos+1))
- server.scriptpos = $1 + 2
- elseif (rsccommand == "INW") //Intro White / Flash because I already used F
- server.introflash=9
- elseif (rsccommand == "STG") //start game
- server.messageon=false
- server.rscstate=0
- RSC_ClearMsg()
- server.pdgstate=0
- apsa_GotoLevel(1)
- elseif (rsccommand == "GTS") //Goto Stage
- apsa_GotoLevel(tonumber(string.sub(script,server.scriptpos,server.scriptpos)))
- server.rscchangedlevel=true
- server.scriptpos = $1 + 1
- elseif (rsccommand == "SPD") //spawn dragon
- local dragonid=CreateEnemy(3,1024,320,-1)
- if (dragonid)
- server.apsaenemies[dragonid].state=4
- end
- elseif (rsccommand == "PLJ") //player jump
- for player in players.iterate
- player.obj.yspeed = -275000
- end
- elseif (rsccommand == "SPL") //stop players
- for player in players.iterate
- player.obj.xspeed = $1 / 2
- if (player.obj.xspeed < 98303)
- player.obj.xspeed=0
- end
- end
- elseif (rsccommand == "PFL") //player flip
- for player in players.iterate
- player.obj.leftright = -player.obj.leftright
- end
- elseif (rsccommand == "SEN") //see ending
- server.pdgstate=2
- elseif (rsccommand == "CAM") //switch camera mode
- if (server.pdgcammode == 0)
- server.pdgcammode=1
- else
- server.pdgcammode=0
- end
- elseif (rsccommand == "PSU") //player speed up
- for player in players.iterate
- player.obj.xspeed = $1 + 1*FRACUNIT
- end
- elseif (rsccommand == "BMU") //boss music
- S_ChangeMusic("KDL3B")
- elseif (rsccommand == "EXL") //exit level
- G_ExitLevel()
- elseif (rsccommand == "IMU") //intro music
- S_ChangeMusic("MAPZZM",false)
- elseif (rsccommand == "END")
- RSC_ClearMsg()
- server.messageon=false
- server.rscstate=0
- end
- end
- //check for new line
- if (string.byte(string.sub(script,server.scriptpos,server.scriptpos)) == 13)
- server.scriptpos = $1 + 1
- end
- //else {scriptpos+=1}
- return ret
- end
- local function RSC_Message()
- if (server.messagepos <= 128)
- local char=string.sub(script,server.scriptpos,server.scriptpos)
- //print(char)
- if (string.byte(char) ~= 13)
- server.messagecontent[server.messagepos].char=char
- server.messagecontent[server.messagepos].col=server.textcolor
- server.messagecontent[server.messagepos].shk=server.textshake
- server.messagecontent[server.messagepos].wav=server.textwave
- server.messagecontent[server.messagepos].ln=server.textline
- server.messagelength = $1 + 1
- else
- server.textline = $1 + 1
- //scriptpos-=1
- end
- //playsfx(global.sfx_msgbox)
- end
- server.messagepos = $1 + 1
- server.scriptpos = $1 + 1
- end
- local function RSC_ExecuteEvent(event)
- local scrpti=0
- //print("FOOK")
- while (scrpti <= string.len(script))
- if (string.sub(script,scrpti,scrpti) == "*")
- //print(tostring(tonumber(string.sub(script,scrpti+1,5)))) //4 = 3 according to string.sub so 5
- //print(string.sub(script,scrpti+1,scrpti+1+3))
- //print(tostring(event))
- if (string.sub(script,scrpti+1,scrpti+1+3) == tostring(event))
- server.scriptpos=scrpti+1+4
- server.rscstate=1
- RSC_Command()
- //print("FUCKEROONI")
- return
- end
- end
- scrpti = $1 + 1
- end
- end
- local function RSC_Step()
- if (mapheaderinfo[gamemap].pdglevel == nil) //map header variable
- return
- end
- if (server.rscinit == nil)
- //Standard RScript Variables
- server.rscstate=0 //0=doing nothing 1=executing (checking for commands and getting messages)
- //2=nod 3=waiting
- server.waittimer=-1
- server.scriptpos=1
- server.textcolor=31
- server.textshake=false
- server.textwave=false
- server.textline=0
- server.messagelength=0
- server.messagepos=0
- server.messageon=0 //0=off (DUH) 1=on (DUH X2) called with MSG 2=on (no box) called with MS2
- server.msy=248 //message y (248 in mode 1,128 in mode 2(can be changed with <MSY),and 16 in mode 3 (actually mode 1 but <MS3)
- server.facepic=0
- server.nodtimer=0
- server.messagecontent={}
- local i=0
- while (i <= 128)
- server.messagecontent[i]={}
- server.messagecontent[i].char=""
- server.messagecontent[i].col=server.textcolor
- server.messagecontent[i].shk=server.textshake
- server.messagecontent[i].wav=server.textwave
- server.messagecontent[i].ln=server.textline
- i = $1 + 1
- end
- server.charname=0
- server.sine=0
- server.rscript_defcolor=31
- server.rscinit=true
- RSC_ExecuteEvent(5000)
- end
- //step
- if (server.rscstate == 1)
- local rsccmd=false
- local char=string.sub(script,server.scriptpos,server.scriptpos)//string_char_at(script,scriptpos)
- if (char == "<")
- while (RSC_Command() and server.rscstate == 1)
- rsccmd=true
- end
- end
- //show_message("wat")
- if (server.messageon and not rsccmd and server.rscstate == 1)
- if (server.rscinterval == 0)
- RSC_Message()
- server.rscinterval=1
- else
- server.rscinterval = $1 - 1
- if (server.rscinterval <= 0)
- server.rscinterval = 0
- end
- end
- if (button_check(server,vk.shoot))
- //server.rscinterval=0
- end
- end
- //end
- elseif (server.rscstate == 2)//nod
- if (button_check_pressed(server,vk.jump))
- server.rscstate=1
- server.rscinterval=0
- end
- server.nodtimer = $1 + 1 //+=0.03125 //in the real petscop this flashes every 16 frames
- //so at 30 fps (the originals framerate) this would be 0.0625
- //end
- elseif (server.rscstate == 3)//waiting
- if (server.waittimer >= 0)
- server.waittimer = $1 - 1
- if (server.waittimer < 0)
- server.rscstate=1
- server.rscinterval=0
- end
- end
- end
- server.sine = $1 + 12538 //+=0.11
- //
- if (server.rscchangedlevel)
- server.messageon=false
- server.rscstate=0
- RSC_ClearMsg()
- server.rscchangedlevel=false
- return
- end
- end
- addHook("ThinkFrame", RSC_Step)
- //-----------------------------END RSCRIPT
- local function apsa_ServerInit()
- if (server.apsainit == nil)
- server.apsainit=true
- server.currentlevel=1
- server.pdgstate=1 //0=ingame 1=not ingame (for intro)
- server.movementmode=0 //0=players can move freely 1=they can't 2=they aren't even visible
- server.introsprite=0
- server.introframe=0
- server.introflash=0
- server.introtimer=0 //so you can exit it by pressing jump after a few seconds
- server.lvlcomplete=false
- server.rscchangedlevel=false
- server.bossevent=false //planning is very important
- server.pdgcammode=0 //0=normal 1=move to target with slowdown
- apsa_InitObjectArrays()
- RSC_ExecuteEvent(5000)
- end
- end
- local function apsa_CheckLevelComplete() //checks if all players have completed the level
- for player in players.iterate
- if (not player.levelcomplete)
- //print("FUCK ASS")
- return false
- end
- end
- //print("SHIT ASS")
- return true
- end
- local function apsa_SpawnExplosions(x,y,spd) //GIMME DAT BOOM
- spd = spd or 3
- local i=0
- local tempobj=0
- while (i < 6)
- tempobj=CreateEffect(0,x/FRACUNIT,y/FRACUNIT)
- if (tempobj)
- server.apsaeffects[tempobj].xspeed=cos(FixedAngle(60*i*FRACUNIT))*spd
- server.apsaeffects[tempobj].yspeed=sin(FixedAngle(60*i*FRACUNIT))*spd
- end
- i = $1 + 1
- end
- end
- //-----------------step
- objfuncs.attackstep[0] = function(obj,id) //sauce
- if (not obj.up)
- obj.x = $1 + 674084 * obj.leftright
- if (apsa_CollideTile(apsa_hitboxes[2],obj.x,obj.y))
- local i=0
- local amount=P_RandomRange(4,6)
- local tempobj=0
- while (i < amount)
- //tempobj=instance_create(x+8*image_xscale,y,objSauceSplash);
- if (tempobj)
- server.apsaeffects[tempobj].xspeed=(P_RandomRange(1,3)*FRACUNIT)*obj.leftright
- server.apsaeffects[tempobj].yspeed=P_RandomRange(-2,2)
- end
- i = $1 + 1;
- end
- DeleteAttack(id)
- return
- end
- else
- obj.y = $1 - 674084
- if (apsa_CollideTile(apsa_hitboxes[2],obj.x,obj.y))
- local i=0
- local amount=P_RandomRange(4,6)
- local tempobj=0
- while (i < amount)
- //tempobj=instance_create(x,y-8,objSauceSplash);
- if (tempobj)
- server.apsaeffects[tempobj].xspeed=P_RandomRange(-3,3)*FRACUNIT
- server.apsaeffects[tempobj].yspeed=P_RandomRange(-2,2)*FRACUNIT
- end
- i = $1 + 1;
- end
- DeleteAttack(id)
- return
- end
- end
- //fall near the end of its timer
- if (obj.timer <= 9 and not obj.up)
- obj.y = $1 + FRACUNIT
- end
- obj.timer = $1 - 2
- if (obj.timer <= 0)
- DeleteAttack(id)
- return
- end
- obj.frame = $1 + 11233
- end
- //----------enemies
- objfuncs.enemystep[0] = function(obj,id) //circle
- if (apsa_PointOnScreen(obj.x,obj.y,16))
- apsa_TriangleEngineStep(obj)
- //friction
- //if (place_meeting(x,y+1,objBlock) or place_meeting(x,y+1,objSlant)) and !moving {if xspeed > 0 {xspeed -=0.1 if xspeed < 0 xspeed=0}
- //else {xspeed+=0.1 if xspeed > 0 xspeed=0}}
- if (obj.onland and not obj.moving)
- if (obj.xspeed > 0)
- obj.xspeed = $1 - 11234
- if (obj.xspeed < 0)
- obj.xspeed=0
- end
- else
- obj.xspeed = $1 + 11234
- if (obj.xspeed > 0)
- obj.xspeed=0
- end
- end
- end
- local nearplayer=apsa_NearPlayer(obj.x,obj.y,128)
- if (nearplayer)
- if (nearplayer.x > obj.x)
- obj.xspeed = $1 + 5617
- else
- obj.xspeed = $1 - 5617
- end
- obj.xspeed=clamp(obj.xspeed,-168521,168521)
- obj.leftright = sign(obj.xspeed)
- if (apsa_CollideTile(apsa_hitboxes[1],obj.x+(24*FRACUNIT),obj.y) and obj.onland)
- obj.yspeed = -275000
- end //THEY CAN JUMP UP WALLS TO CHASE YOU?! this changes EVERYTHING!!!!
- obj.frame=1*FRACUNIT
- obj.moving = true
- else
- obj.moving=false
- obj.frame=0
- end
- end
- if (obj.hurttimer > 0)
- obj.hurttimer = $1 - 1
- end
- local gothit=apsa_EnemyGetHit(apsa_hitboxes[1],obj.x,obj.y)
- if (gothit and obj.hurttimer == 0)
- //playsfx(global.hurt2sound)
- apsa_PlaySFXNear(sfx_dmpain,obj.x,obj.y)
- obj.hp = $1 - gothit
- obj.hurttimer = 2
- //print("got hit wtf "..id)
- end
- if (obj.hp <= 0)
- CreateEffect(0,obj.x/FRACUNIT,obj.y/FRACUNIT)
- apsa_PlaySFXNear(sfx_s3kb4,obj.x,obj.y)
- DeleteEnemy(id)
- return
- /*instance_create(x,y,objExplosion)
- instance_create(x,y-8,objSlice)
- instance_destroy()*/
- end
- end
- objfuncs.enemystep[1] = function(obj,id) //circlegunner
- if (apsa_PointOnScreen(obj.x,obj.y,16))
- apsa_TriangleEngineStep(obj)
- local nearplayer=apsa_NearPlayer(obj.x,obj.y,192)
- if (nearplayer)
- obj.leftright = -sign(obj.x-nearplayer.x)
- end
- if (obj.state == 0)
- if (nearplayer)
- obj.state=1
- obj.shoottimer=20
- end
- obj.frame=0
- elseif (obj.state == 1)
- obj.shoottimer = $1 - 1
- if ((obj.shoottimer % 3) == 1)
- CreateEnemy(2,(obj.x/FRACUNIT)+(20*obj.leftright),(obj.y/FRACUNIT)+4,obj.leftright)
- apsa_PlaySFXNear(sfx_pdglsr,obj.x,obj.y,0)
- end
- if ((obj.shoottimer % 2) == 1)
- obj.frame = $1 + FRACUNIT
- if (obj.frame >= 2*FRACUNIT)
- obj.frame=0
- end
- end
- if (obj.shoottimer <= 0)
- obj.state=2
- obj.shoottimer=90
- end
- elseif (obj.state == 2)
- obj.shoottimer = $1 - 1
- if (obj.shoottimer <= 0)
- obj.state=0
- end
- obj.frame=0
- end
- end
- if (obj.hurttimer > 0)
- obj.hurttimer = $1 - 1
- end
- local gothit=apsa_EnemyGetHit(apsa_hitboxes[1],obj.x,obj.y)
- if (gothit and obj.hurttimer == 0)
- //playsfx(global.hurt2sound)
- apsa_PlaySFXNear(sfx_dmpain,obj.x,obj.y)
- obj.hp = $1 - gothit
- obj.hurttimer = 2
- //print("got hit wtf "..id)
- end
- if (obj.hp <= 0)
- CreateEffect(0,obj.x/FRACUNIT,obj.y/FRACUNIT)
- apsa_PlaySFXNear(sfx_s3kb4,obj.x,obj.y)
- DeleteEnemy(id)
- return
- /*instance_create(x,y,objExplosion)
- instance_create(x,y-8,objSlice)
- instance_destroy()*/
- end
- end
- objfuncs.enemystep[2] = function(obj,id) //circlegunner bullet
- obj.x = $1 + (898779*obj.leftright)
- obj.timer = $1 + 1
- if (obj.timer >= 17)
- DeleteEnemy(id)
- return
- end
- end
- objfuncs.enemystep[3] = function(obj,id) //dragon
- // run down hurt timer
- if (obj.hurttimer > 0)
- obj.hurttimer = $1 - 1
- end
- // Take damage
- if (apsa_EnemyGetHit(apsa_hitboxes[4],obj.x,obj.y) and obj.hurttimer == 0 and obj.hp > 0)
- obj.hp = $1 - 1
- obj.hurttimer = 120
- // give us time to change phase
- if (obj.hp == 6)
- obj.hurttimer = 240
- obj.timer = 0
- obj.state = 7
- end
- if (obj.hp < 6)
- obj.hurttimer = 150
- end
- if (obj.hp == 0)
- local i = 0
- while (i < 10)
- DeleteEnemy(obj.fireids[i])
- i = $1 + 1
- end
- obj.state = 9 //ded
- S_StopMusic()
- S_StartSound(nil,sfx_s3kb4)
- obj.canhurt = false
- obj.timer = 0
- end
- end
- // animate
- obj.ft = $1 + 1
- if (obj.ft == obj.framespeed and obj.state < 9)
- obj.ft = 0
- obj.frame = max(FRACUNIT,($1 + FRACUNIT) % 3*FRACUNIT)
- end
- // if we're in state 9, then shake and fall
- if (obj.state == 9)
- obj.timer = $1 + 32768
- obj.timer = min(obj.timer,8*FRACUNIT)
- obj.y = $1 + obj.timer
- if (obj.y > 312*FRACUNIT)
- obj.state = 10
- obj.timer = 0
- end
- end
- if (obj.state == 10)
- obj.timer = $1 + 1
- if (obj.timer > 10)
- local spawnchance = P_RandomRange(min(120,obj.timer-10),120)
- if (spawnchance >= 112 and obj.timer < 185)
- apsa_SpawnExplosions((obj.x-25*FRACUNIT)+(P_RandomRange(0,50)*FRACUNIT),(obj.y-25*FRACUNIT)+(P_RandomRange(0,50)*FRACUNIT))
- S_StartSound(nil,sfx_s3kb4)
- end
- end
- if (obj.timer == 185)
- //destroy all existing explosions
- local i=1
- while (i <= 45)
- server.apsaeffects[i] = nil
- i = $1 + 1
- end
- //ULTRA BOOM
- i=0
- while (i < 3)
- apsa_SpawnExplosions((obj.x)+cos(FixedAngle(60*i*FRACUNIT))*8,(obj.y)+sin(FixedAngle(60*i*FRACUNIT))*8,10)
- i = $1 + 1
- end
- S_StartSound(nil,sfx_bkpoof)
- end
- // finally, perish
- if (obj.timer == 190)
- local i=0
- while (i < 3)
- apsa_SpawnExplosions((obj.x)+cos(FixedAngle(((60*i)+22)*FRACUNIT))*8,(obj.y)+sin(FixedAngle(((60*i)+22)*i*FRACUNIT))*8,5)
- i = $1 + 1
- end
- RSC_ExecuteEvent(5004)
- DeleteEnemy(id)
- return
- end
- end
- // if we're in state 7, that means we're entering pinch mode. move to the middle of the screen
- if (obj.state == 7)
- obj.x = $1 + cos(R_PointToAngle2(obj.x,obj.y,536*FRACUNIT,130*FRACUNIT))*5
- obj.y = $1 + sin(R_PointToAngle2(obj.x,obj.y,536*FRACUNIT,130*FRACUNIT))*5
- if (536*FRACUNIT > obj.x)
- obj.leftright = 1
- else
- obj.leftright = -1
- end
- if R_PointToDist2(obj.x,obj.y,536*FRACUNIT,130*FRACUNIT) <= 8*FRACUNIT
- obj.state = 8
- obj.fires = {}
- local i = 0
- while (i < 10)
- obj.fireids[i] = CreateEnemy(4,obj.x/FRACUNIT,obj.y/FRACUNIT,0)
- obj.fires[i] = server.apsaenemies[obj.fireids[i]]
- // lol
- obj.fires[i].timer = -2147483647
- i = $1 + 1
- end
- S_StartSound(nil,sfx_s3k3e)
- obj.radiusstate = 1
- obj.targetradius = P_RandomRange(200,250)*FRACUNIT
- obj.rotstate = 1
- obj.targetrot = P_RandomRange(20,360)*FRACUNIT
- end
- end
- // We are now in state 8, so we now must rotate the fire around us and move it around
- if (obj.state == 8)
- // move towards radius, outwards
- if (obj.radiusstate == 1)
- // not smoothing
- if (obj.radiustime == 0)
- obj.fireradius = $1 + 2*FRACUNIT
- // achieved target radius, now switch
- if (obj.fireradius >= obj.targetradius)
- obj.targetradius = P_RandomRange(100,150)*FRACUNIT
- obj.radiusstate = -1
- obj.radiustime = 26
- end
- else
- // smooth out the transition
- obj.fireradius = $1 - ((2*FRACUNIT)-FixedMul(4*FRACUNIT,FixedDiv(26*FRACUNIT-obj.radiustime*FRACUNIT,26*FRACUNIT)))
- obj.radiustime = $1 - 1
- end
- else
- // not smoothing
- if (obj.radiustime == 0)
- obj.fireradius = $1 - 2*FRACUNIT
- // achieved target radius, now switch
- if (obj.fireradius <= obj.targetradius)
- obj.targetradius = P_RandomRange(200,250)*FRACUNIT
- obj.radiusstate = 1
- obj.radiustime = 26
- end
- else
- // smooth out the transition
- obj.fireradius = $1 + ((2*FRACUNIT)-FixedMul(4*FRACUNIT,FixedDiv(26*FRACUNIT-obj.radiustime*FRACUNIT,26*FRACUNIT)))
- obj.radiustime = $1 - 1
- end
- end
- // move towards rot, outwards
- if (obj.rotstate == 1)
- // not smoothing
- if (obj.rottime == 0)
- obj.firerot = $1 + 1*FRACUNIT
- // achieved target rot, now switch
- if (obj.firerot >= obj.targetrot)
- obj.targetrot = P_RandomRange(0,obj.firerot/FRACUNIT)*FRACUNIT
- obj.rotstate = -1
- obj.rottime = 26
- end
- else
- // smooth out the transition
- obj.firerot = $1 - ((1*FRACUNIT)-FixedMul(2*FRACUNIT,FixedDiv(26*FRACUNIT-obj.rottime*FRACUNIT,26*FRACUNIT)))
- obj.rottime = $1 - 1
- end
- else
- // not smoothing
- if (obj.rottime == 0)
- obj.firerot = $1 - 1*FRACUNIT
- // achieved target rot, now switch
- if (obj.firerot <= obj.targetrot)
- obj.targetrot = P_RandomRange(obj.firerot/FRACUNIT,360)*FRACUNIT
- obj.rotstate = 1
- obj.rottime = 26
- end
- else
- // smooth out the transition
- obj.firerot = $1 + ((1*FRACUNIT)-FixedMul(2*FRACUNIT,FixedDiv(26*FRACUNIT-obj.rottime*FRACUNIT,26*FRACUNIT)))
- obj.rottime = $1 - 1
- end
- end
- // move fire into place
- local baserot = obj.firerot
- local i = 0
- while (i < 10)
- obj.fires[i].x = obj.x + FixedMul(obj.fireradius, cos(FixedAngle(baserot)))
- obj.fires[i].y = obj.y + FixedMul(obj.fireradius, sin(FixedAngle(baserot)))
- baserot = $1 + 36*FRACUNIT
- i = $1 + 1
- end
- end
- // if we're in state 0, decide an arbitrary position to fly to
- if (obj.state == 0)
- obj.targx = P_RandomRange(256,916)*FRACUNIT
- obj.targy = P_RandomRange(128,164)*FRACUNIT
- // face direction going
- if (obj.targx > obj.x)
- obj.leftright = 1
- else
- obj.leftright = -1
- end
- obj.state = 1
- end
- // if we're in state 1, then fly to our arbitrary position
- if (obj.state == 1)
- obj.x = $1 + cos(R_PointToAngle2(obj.x,obj.y,obj.targx,obj.targy))*5
- obj.y = $1 + sin(R_PointToAngle2(obj.x,obj.y,obj.targx,obj.targy))*5
- if R_PointToDist2(obj.x,obj.y,obj.targx,obj.targy) <= 8*FRACUNIT
- obj.state = 2
- end
- end
- // Once we're in position, let's shoot some fireballs
- if (obj.state == 2)
- obj.timer = $1 + 1
- // If we've shot our fair share of fireballs, then let's do a different attack
- if (obj.timer == 72)
- obj.state = P_RandomRange(0,1)
- if (obj.state == 0)
- obj.state = 3
- else
- obj.state = 5
- end
- obj.timer = 0
- end
- if (obj.timer % 18 == 0 and obj.timer != 0)
- S_StartSound(nil,sfx_s3k43)
- // locate nearest player
- obj.target = apsa_NearPlayer(obj.x,obj.y,20000)
- // shit, no player, abort, abort!
- if (obj.target == false)
- return
- end
- if (obj.target.x > obj.x)
- obj.leftright = 1
- else
- obj.leftright = -1
- end
- local fire = CreateEnemy(4,(obj.x + obj.leftright*45*FRACUNIT)/FRACUNIT,obj.y/FRACUNIT,0)
- server.apsaenemies[fire].xsp = 6*cos(R_PointToAngle2(server.apsaenemies[fire].x,server.apsaenemies[fire].y,obj.target.x,obj.target.y))
- server.apsaenemies[fire].ysp = 6*sin(R_PointToAngle2(server.apsaenemies[fire].x,server.apsaenemies[fire].y,obj.target.x,obj.target.y))
- end
- end
- // swoop off screen
- if (obj.state == 3)
- if (obj.x < 1500*FRACUNIT)
- obj.x = $1 + 10*FRACUNIT
- obj.leftright = 1
- else
- obj.state = 4
- obj.y = 312*FRACUNIT
- end
- end
- // swoop on screen
- if (obj.state == 4)
- if (obj.x > -100*FRACUNIT)
- obj.x = $1 - 10*FRACUNIT
- obj.leftright = -1
- else
- obj.state = 0
- obj.y = 256*FRACUNIT
- end
- end
- // prepare to smash into the ground by doing a little shake to let players know to get the heck outta dodge
- if (obj.state == 5)
- obj.timer = $1 + 1
- if obj.timer > 15 and obj.timer < 35
- local t = obj.timer % 2
- if t == 0
- obj.y = $1 + 4*FRACUNIT
- else
- obj.y = $1 - 4*FRACUNIT
- end
- end
- if (obj.timer == 60)
- obj.timer = 0
- obj.state = 6
- end
- end
- // actually smash into the ground
- if (obj.state == 6)
- obj.timer = $1 + 1
- if (obj.timer < 6)
- obj.y = $1 - 6*FRACUNIT
- else
- obj.y = $1 + 14*FRACUNIT
- if (obj.y >= 312*FRACUNIT)
- obj.y = 312*FRACUNIT
- // we have collided into the ground
- if (obj.timer < 1000)
- S_StartSound(nil,sfx_s3k5f)
- obj.timer = 1000
- local e = CreateEnemy(2,(obj.x/FRACUNIT)-50,obj.y/FRACUNIT,-1)
- server.apsaenemies[e].timer = -20
- e = CreateEnemy(2,(obj.x/FRACUNIT)+50,obj.y/FRACUNIT,1)
- server.apsaenemies[e].timer = -20
- end
- end
- end
- if (obj.timer == 1050)
- obj.state = 0
- obj.timer = 0
- end
- end
- end
- objfuncs.enemystep[4] = function(obj,id) //dragon bullet
- obj.frame = $1 + FRACUNIT
- obj.timer = $1 + 1
- obj.x = $1 + obj.xsp
- obj.y = $1 + obj.ysp
- obj.leftright = 0
- if (obj.timer == 70)
- DeleteEnemy(id)
- end
- end
- //----------effects
- objfuncs.effectstep[0] = function(obj,id) //splod
- obj.x = $1 + obj.xspeed
- obj.y = $1 + obj.yspeed
- obj.frame = $1 + 24000
- if (obj.frame >= 4*FRACUNIT)
- DeleteEffect(id)
- return
- end
- end
- local function ObjectsStep() //execute objects
- local i=1
- while (i <= 80)
- if (server.apsaattacks[i] ~= nil)
- objfuncs.attackstep[server.apsaattacks[i].otype](server.apsaattacks[i],i)
- end
- i = $1 + 1
- end
- i=1
- while (i <= 45)
- if (server.apsaenemies[i] ~= nil)
- objfuncs.enemystep[server.apsaenemies[i].otype](server.apsaenemies[i],i)
- end
- i = $1 + 1
- end
- i=1
- while (i <= 45)
- if (server.apsaeffects[i] ~= nil)
- objfuncs.effectstep[server.apsaeffects[i].otype](server.apsaeffects[i],i)
- end
- i = $1 + 1
- end
- end
- //player
- local function apsa_PlayerAnimation(player)
- if (player.obj.onland)
- if (player.obj.shoottimer <= 3)
- player.obj.spriteindex=1
- if (player.obj.xspeed ~= 0)
- player.obj.spriteindex=2
- player.obj.framespeed=abs(player.obj.xspeed)/16
- end
- end
- elseif (player.obj.shoottimer <= 3)
- player.obj.spriteindex=3
- player.obj.framespeed=0
- if (player.obj.yspeed < 0)
- player.obj.frame=0
- else
- player.obj.frame=FRACUNIT
- end
- end
- end
- local function apsa_PlayerMovement(player)
- if (button_check(player,vk.right) and not button_check(player,vk.left))
- player.obj.xspeed = $1 + 8224
- if (player.obj.xspeed < 0)
- player.obj.xspeed = $1 + 11231 //turn around fast
- end
- if (not button_check(player,vk.shoot))
- player.obj.leftright=1
- end
- end
- if (button_check(player,vk.left) and not button_check(player,vk.right))
- player.obj.xspeed = $1 - 8224
- if (player.obj.xspeed > 0)
- player.obj.xspeed = $1 - 11231 //turn around fast
- end
- if (not button_check(player,vk.shoot))
- player.obj.leftright=-1
- end
- end
- if (player.obj.onland)
- //friction
- if (not button_check(player,vk.right) and not button_check(player,vk.left))
- if (player.obj.xspeed > 0)
- player.obj.xspeed=clamp(player.obj.xspeed-11231,0,255*FRACUNIT)
- else
- player.obj.xspeed=clamp(player.obj.xspeed+11231,-255*FRACUNIT,0)
- end
- end
- //jumping
- //449315
- if (button_check_pressed(player,vk.jump))
- //print("jump")
- apsa_PlaySFXNear(sfx_jump,player.obj.x,player.obj.y)
- player.obj.yspeed = -275000
- player.obj.onland = false
- end
- end
- player.obj.xspeed=clamp(player.obj.xspeed,-269584,269584)
- end
- local function apsa_PlayerAbilities(player)
- local bulletcount=0
- //with (objSauce) {bulletcount+=1}
- if (not button_check(player,vk.shoot))
- if (button_check(player,vk.up))
- player.obj.shootup=true
- else
- player.obj.shootup=false
- end
- end
- //actually shoot
- if (bulletcount <= 2) /*shoottimer=0*/
- if (button_check_pressed(player,vk.shoot))
- //instance_create(x+11*leftright-(10*shootup)*leftright,y+7,objSauce)
- local tempobj=0
- apsa_PlaySFXNear(sfx_gloop,player.obj.x,player.obj.y)
- tempobj=CreateAttack(0,player.obj.x/FRACUNIT,player.obj.y/FRACUNIT,player.obj.leftright)
- if (tempobj)
- server.apsaattacks[tempobj].up=player.obj.shootup
- end
- player.obj.shoottimer=15
- player.obj.spriteindex=6
- if (player.obj.shootup)
- player.obj.spriteindex=7
- end
- player.obj.framespeed=16384
- end
- end
- //shoottimer needs to go down so you can keep shooting after the first shot
- if (player.obj.shoottimer > 0)
- player.obj.shoottimer = clamp(player.obj.shoottimer - 1,0,16)
- end
- end
- local function apsa_PlayerFuckingDie(player)
- player.dead=true
- player.deathtimer=0
- apsa_SpawnExplosions(player.obj.x,player.obj.y) //GO OUT IN A BLAZE OF GLORYYY
- end
- local function apsa_PlayerStep(player)
- if (server.pdgstate == 0) //was gonna spawn players when ingame but tacking on a basic fundamental thing like that after i've coded so much was not gonna work so lets just..hide the players existence in the intro (trust me this is good coding practice)
- if (not player.dead)
- apsa_TriangleEngineStep(player.obj)
- if (server.movementmode == 0 and not player.levelcomplete)
- apsa_PlayerMovement(player)
- apsa_PlayerAbilities(player)
- local spring=apsa_PlayerHitSpring(player.obj.x,player.obj.y)
- if (spring)
- if (not S_IdPlaying(sfx_spring))
- apsa_PlaySFXNear(sfx_spring,player.obj.x,player.obj.y)
- end
- if (server.apsasprings[spring].otype == 0)
- player.obj.yspeed = -391000
- else //diagonal
- player.obj.yspeed = -391000
- player.obj.xspeed=(269854*server.apsasprings[spring].leftright)
- end
- end
- end
- if (server.movementmode ~= 0)
- local spring=apsa_PlayerHitSpring(player.obj.x,player.obj.y)
- if (spring)
- if (not S_IdPlaying(sfx_spring))
- apsa_PlaySFXNear(sfx_spring,player.obj.x,player.obj.y)
- end
- if (server.apsasprings[spring].otype == 0)
- player.obj.yspeed = -391000
- else //diagonal
- player.obj.yspeed = -391000
- player.obj.xspeed=(269854*server.apsasprings[spring].leftright)
- end
- end
- end
- player.obj.x=clamp(player.obj.x,0,(levels[server.currentlevel].width*16)*FRACUNIT)
- //complete level
- if (levels[server.currentlevel].levelend ~= nil and not player.levelcomplete)
- if (apsa_PointInRectangle(player.obj.x,player.obj.y,levels[server.currentlevel].levelend.x1,levels[server.currentlevel].levelend.y1,levels[server.currentlevel].levelend.x2,levels[server.currentlevel].levelend.y2))
- player.levelcomplete=true
- player.obj.xspeed=0
- end
- end
- if (not player.levelcomplete)
- if (player.tempinvin ~= 0)
- player.tempinvin = $1 - 1
- end
- if (player.tempinvin == 0 and apsa_PlayerGetHit(player.obj.x,player.obj.y))
- player.hp = $1 - 1
- player.tempinvin=35
- player.obj.xspeed = 0
- end
- if (player.hp <= 0 or player.obj.y >= ((levels[server.currentlevel].height*16)*FRACUNIT))
- apsa_PlaySFXNear(sfx_s3k35,player.obj.x,player.obj.y)
- apsa_PlayerFuckingDie(player)
- end
- end
- apsa_PlayerAnimation(player)
- player.obj.frame = $1 + player.obj.framespeed
- //camera
- //player.viewpos.x = clamp((player.obj.x/FRACUNIT)-320,0,clamp((levels[server.currentlevel].width*16)-640,640,99999))
- //player.viewpos.y = clamp((player.obj.y/FRACUNIT)-200,0,clamp((levels[server.currentlevel].height*16)-200,200,99999))
- /*player.viewpos.x = (player.obj.x/FRACUNIT)-320
- player.viewpos.x = clamp(player.viewpos.x,0,clamp((levels[server.currentlevel].width*16)-656,0,99999))
- player.viewpos.y = (player.obj.y/FRACUNIT)-200
- player.viewpos.y = clamp(player.viewpos.y,0,clamp((levels[server.currentlevel].height*16)-416,0,99999))*/
- if (server.pdgcammode == 0)
- player.campos.x=player.obj.x
- player.campos.y=player.obj.y
- else
- player.campos.x = $1 + ((6080*FRACUNIT)-player.campos.x)/15
- player.campos.y = $1 + ((128*FRACUNIT)-player.campos.y)/15
- end
- player.viewpos.x = (player.campos.x/FRACUNIT)-320
- player.viewpos.x = clamp(player.viewpos.x,0,clamp((levels[server.currentlevel].width*16)-656,0,99999))
- player.viewpos.y = (player.campos.y/FRACUNIT)-200
- player.viewpos.y = clamp(player.viewpos.y,0,clamp((levels[server.currentlevel].height*16)-416,0,99999))
- else //you're dead kiddo
- player.deathtimer = $1 + 1
- if (player.deathtimer >= 70) //but now you're not
- player.obj.x=levels[server.currentlevel].startx*FRACUNIT
- player.obj.y=levels[server.currentlevel].starty*FRACUNIT
- if (server.currentlevel == 3) //don't respawn over a death pit on the boss
- player.obj.x=256*FRACUNIT
- end
- player.obj.xspeed=0
- player.obj.yspeed=0
- player.obj.shoottimer=0
- player.obj.shootup=0
- player.obj.spriteindex=1
- player.obj.frame=0
- player.obj.framespeed=0
- player.deathtimer=0
- player.dead=false
- player.tempinvin=0
- player.hp=4
- end
- end
- end
- end
- local function apsa_PlayerSpawn(player)
- player.obj=apsa_CreateTriangleEngineObject()
- player.obj.x=levels[server.currentlevel].startx*FRACUNIT
- player.obj.y=levels[server.currentlevel].starty*FRACUNIT
- player.obj.shoottimer=0
- player.obj.shootup=0
- player.obj.spriteindex=1
- player.obj.frame=0
- player.obj.framespeed=0
- end
- local function apsa_PlayerInit(player)
- if (player.apsainitp == nil)
- player.apsainitp=true
- player.viewpos={}
- player.viewpos.x=0
- player.viewpos.y=0
- player.campos={} //fracunits (turned into viewpos which is pixels)
- player.campos.x=0
- player.campos.y=0
- player.dead=false
- player.deathtimer=0
- player.hp=4
- player.tempinvin=0
- player.levelcomplete=false
- apsa_PlayerSpawn(player)
- player.inputs = {0,0,0,0,0,0,0,0}
- player.inputsprev = {0,0,0,0,0,0,0,0}
- player.pflags = $1 | PF_FORCESTRAFE
- player.normalspeed=0
- player.jumpfactor=0
- player.charability=CA_NONE
- player.charability2=CA_NONE
- //print("APSA Init")
- end
- if (player.obj == nil)
- apsa_PlayerSpawn(player)
- end
- //force player flags every frame
- player.pflags = $1 | PF_FORCESTRAFE
- player.normalspeed=0
- player.jumpfactor=0
- player.charability=CA_NONE
- player.charability2=CA_NONE
- end
- local function apsa_Main()
- if (mapheaderinfo[gamemap].pdglevel == nil) //map header variable
- return
- end
- apsa_ServerInit()
- //server code
- if (server.introflash > 0)
- server.introflash = $1 - 1
- end
- //exit intro by pressing button
- if (server.pdgstate == 1)
- server.introtimer = $1 + 1
- if (server.introtimer >= 2) //so it doesn't error while using button_check
- //if in single player/splitscreen you can skip the intro right away otherwise only after 10 seconds
- if ((multiplayer and not splitscreen and server.introtimer > 350 and button_check_pressed(server,vk.jump)) or ((splitscreen or not multiplayer) and button_check_pressed(server,vk.jump))) //good code
- //start game
- server.messageon=false
- server.rscstate=0
- RSC_ClearMsg()
- server.pdgstate=0
- apsa_GotoLevel(1)
- end
- end
- end
- if (server.bossevent)
- server.bossevent=false
- RSC_ExecuteEvent(5003)
- for player in players.iterate
- player.obj.xspeed=4*FRACUNIT
- end
- end
- //game
- for player in players.iterate
- apsa_PlayerInit(player)
- apsa_PlayerInput(player)
- apsa_PlayerStep(player)
- end
- if (server.pdgstate == 0)
- ObjectsStep()
- if (not server.lvlcomplete)
- if (apsa_CheckLevelComplete())
- server.lvlcomplete=true
- RSC_ExecuteEvent(levels[server.currentlevel].levelend.event)
- end
- end
- end
- //print(server.lvlcomplete)
- end
- hud.add(TestDraw,"game")
- addHook("ThinkFrame", apsa_Main)
- local function apsa_Reload()
- if (server.apsainit and mapheaderinfo[gamemap].pdglevel ~= nil)
- server.currentlevel=1
- server.pdgstate=1 //0=ingame 1=not ingame (for intro)
- server.movementmode=0 //0=players can move freely 1=they can't 2=they aren't even visible
- server.introsprite=0
- server.introframe=0
- server.introflash=0
- server.introtimer=0 //so you can exit it by pressing jump after a few seconds
- server.lvlcomplete=false
- server.rscchangedlevel=false
- server.bossevent=false //planning is very important
- server.pdgcammode=0 //0=normal 1=move to target with slowdown
- apsa_InitObjectArrays()
- RSC_ExecuteEvent(5000)
- end
- end
- addHook("MapLoad", apsa_Reload)
Add Comment
Please, Sign In to add comment