frozenLake

Mr. Triangle Fixed code

Mar 24th, 2019
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 165.94 KB | None | 0 0
  1. /*welcome to the pdg 1.5 codebase
  2. they say
  3. if you look directly at it
  4. you go insane, your eyeballs catch on fire, then all your internal organs rupture
  5. -root
  6. */
  7.  
  8. /*also if you're wondering:this was gonna be a different game (with a bigger scope)
  9. back when kawaiii was announced
  10. we got the platformer engine working in 2 days...then got lazy for a month
  11. it was too late for the thing we were going to make so we just made this in 6 days
  12. apsa was the codename for the old thing but ehh not gonna bother changing it
  13. and i guess it technically makes sense because you can read it as "a pizza"
  14. *shot*
  15. */
  16.  
  17. freeslot(
  18. "sfx_pdglsr"
  19. )
  20. sfxinfo[sfx_pdglsr] = {
  21. singular = false,
  22. priority = 64
  23. }
  24.  
  25.  
  26. //-------------------------
  27. //local values
  28. local levels = {}
  29. levels[1] = {}
  30. levels[2] = {}
  31. levels[3] = {}
  32.  
  33. //level 1
  34. levels[1].startx=32
  35. levels[1].starty=304
  36.  
  37.  
  38. levels[1].width=412
  39. levels[1].height=44
  40. 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,}
  41.  
  42.  
  43. levels[1].objamount=16
  44. /*levels[1].objs={}
  45. levels[1].objs[0]={}
  46. levels[1].objs[0].cat=0 //category: 0=enemies 1=springs
  47. levels[1].objs[0].leftright=-1
  48. levels[1].objs[0].otype=0
  49. levels[1].objs[0].x=64 //pixels not fracunits
  50. levels[1].objs[0].y=128*/
  51. levels[1].objs={}
  52. levels[1].objs[0]={}
  53. levels[1].objs[0].cat=0 //category: 0=enemies 1=springs
  54. levels[1].objs[0].leftright=-1
  55. levels[1].objs[0].otype=0
  56. levels[1].objs[0].x=304 //pixels not fracunits
  57. levels[1].objs[0].y=239
  58.  
  59. levels[1].objs[1]={}
  60. levels[1].objs[1].cat=0 //category: 0=enemies 1=springs
  61. levels[1].objs[1].leftright=-1
  62. levels[1].objs[1].otype=0
  63. levels[1].objs[1].x=752 //pixels not fracunits
  64. levels[1].objs[1].y=495
  65.  
  66. levels[1].objs[2]={}
  67. levels[1].objs[2].cat=1 //category: 0=enemies 1=springs
  68. levels[1].objs[2].leftright=-1
  69. levels[1].objs[2].otype=0
  70. levels[1].objs[2].x=1248 //pixels not fracunits
  71. levels[1].objs[2].y=464
  72.  
  73. levels[1].objs[3]={}
  74. levels[1].objs[3].cat=0 //category: 0=enemies 1=springs
  75. levels[1].objs[3].leftright=-1
  76. levels[1].objs[3].otype=0
  77. levels[1].objs[3].x=1200 //pixels not fracunits
  78. levels[1].objs[3].y=479
  79.  
  80. levels[1].objs[4]={}
  81. levels[1].objs[4].cat=0 //category: 0=enemies 1=springs
  82. levels[1].objs[4].leftright=-1
  83. levels[1].objs[4].otype=0
  84. levels[1].objs[4].x=1552 //pixels not fracunits
  85. levels[1].objs[4].y=303
  86.  
  87. levels[1].objs[5]={}
  88. levels[1].objs[5].cat=0 //category: 0=enemies 1=springs
  89. levels[1].objs[5].leftright=-1
  90. levels[1].objs[5].otype=0
  91. levels[1].objs[5].x=2272 //pixels not fracunits
  92. levels[1].objs[5].y=335
  93.  
  94. levels[1].objs[6]={}
  95. levels[1].objs[6].cat=0 //category: 0=enemies 1=springs
  96. levels[1].objs[6].leftright=-1
  97. levels[1].objs[6].otype=0
  98. levels[1].objs[6].x=2576 //pixels not fracunits
  99. levels[1].objs[6].y=399
  100.  
  101. levels[1].objs[7]={}
  102. levels[1].objs[7].cat=0 //category: 0=enemies 1=springs
  103. levels[1].objs[7].leftright=-1
  104. levels[1].objs[7].otype=0
  105. levels[1].objs[7].x=3456 //pixels not fracunits
  106. levels[1].objs[7].y=575
  107.  
  108. levels[1].objs[8]={}
  109. levels[1].objs[8].cat=0 //category: 0=enemies 1=springs
  110. levels[1].objs[8].leftright=-1
  111. levels[1].objs[8].otype=0
  112. levels[1].objs[8].x=3568 //pixels not fracunits
  113. levels[1].objs[8].y=575
  114.  
  115. levels[1].objs[9]={}
  116. levels[1].objs[9].cat=1 //category: 0=enemies 1=springs
  117. levels[1].objs[9].leftright=-1
  118. levels[1].objs[9].otype=0
  119. levels[1].objs[9].x=3664 //pixels not fracunits
  120. levels[1].objs[9].y=576
  121.  
  122. levels[1].objs[10]={}
  123. levels[1].objs[10].cat=0 //category: 0=enemies 1=springs
  124. levels[1].objs[10].leftright=-1
  125. levels[1].objs[10].otype=0
  126. levels[1].objs[10].x=3952 //pixels not fracunits
  127. levels[1].objs[10].y=384
  128.  
  129. levels[1].objs[11]={}
  130. levels[1].objs[11].cat=0 //category: 0=enemies 1=springs
  131. levels[1].objs[11].leftright=-1
  132. levels[1].objs[11].otype=1
  133. levels[1].objs[11].x=4464 //pixels not fracunits
  134. levels[1].objs[11].y=431
  135.  
  136. levels[1].objs[12]={}
  137. levels[1].objs[12].cat=0 //category: 0=enemies 1=springs
  138. levels[1].objs[12].leftright=-1
  139. levels[1].objs[12].otype=0
  140. levels[1].objs[12].x=4672 //pixels not fracunits
  141. levels[1].objs[12].y=335
  142.  
  143. levels[1].objs[13]={}
  144. levels[1].objs[13].cat=0 //category: 0=enemies 1=springs
  145. levels[1].objs[13].leftright=-1
  146. levels[1].objs[13].otype=0
  147. levels[1].objs[13].x=5024 //pixels not fracunits
  148. levels[1].objs[13].y=303
  149.  
  150. levels[1].objs[14]={}
  151. levels[1].objs[14].cat=0 //category: 0=enemies 1=springs
  152. levels[1].objs[14].leftright=-1
  153. levels[1].objs[14].otype=0
  154. levels[1].objs[14].x=5584 //pixels not fracunits
  155. levels[1].objs[14].y=399
  156.  
  157. levels[1].objs[15]={}
  158. levels[1].objs[15].cat=0 //category: 0=enemies 1=springs
  159. levels[1].objs[15].leftright=-1
  160. levels[1].objs[15].otype=0
  161. levels[1].objs[15].x=5664 //pixels not fracunits
  162. levels[1].objs[15].y=399
  163.  
  164.  
  165. levels[1].levelend={}
  166. levels[1].levelend.x1=6512*FRACUNIT
  167. levels[1].levelend.y1=384*FRACUNIT
  168. levels[1].levelend.x2=6592*FRACUNIT
  169. levels[1].levelend.y2=512*FRACUNIT
  170. levels[1].levelend.event=5001 //executes once everyone is at the end
  171.  
  172. //level 2
  173.  
  174. levels[2].startx=32
  175. levels[2].starty=704
  176.  
  177.  
  178. levels[2].width=400
  179. levels[2].height=48
  180. 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,}
  181.  
  182.  
  183. levels[2].objamount=18
  184. levels[2].objs={}
  185. levels[2].objs[0]={}
  186. levels[2].objs[0].cat=0 //category: 0=enemies 1=springs
  187. levels[2].objs[0].leftright=-1
  188. levels[2].objs[0].otype=0
  189. levels[2].objs[0].x=576 //pixels not fracunits
  190. levels[2].objs[0].y=172
  191.  
  192. levels[2].objs[1]={}
  193. levels[2].objs[1].cat=1 //category: 0=enemies 1=springs
  194. levels[2].objs[1].leftright=1
  195. levels[2].objs[1].otype=1
  196. levels[2].objs[1].x=16 //pixels not fracunits
  197. levels[2].objs[1].y=240
  198.  
  199. levels[2].objs[2]={}
  200. levels[2].objs[2].cat=1 //category: 0=enemies 1=springs
  201. levels[2].objs[2].leftright=1
  202. levels[2].objs[2].otype=0
  203. levels[2].objs[2].x=2608 //pixels not fracunits
  204. levels[2].objs[2].y=688
  205.  
  206. levels[2].objs[3]={}
  207. levels[2].objs[3].cat=1 //category: 0=enemies 1=springs
  208. levels[2].objs[3].leftright=1
  209. levels[2].objs[3].otype=0
  210. levels[2].objs[3].x=2448 //pixels not fracunits
  211. levels[2].objs[3].y=592
  212.  
  213. levels[2].objs[4]={}
  214. levels[2].objs[4].cat=1 //category: 0=enemies 1=springs
  215. levels[2].objs[4].leftright=1
  216. levels[2].objs[4].otype=0
  217. levels[2].objs[4].x=1872 //pixels not fracunits
  218. levels[2].objs[4].y=528
  219.  
  220. levels[2].objs[5]={}
  221. levels[2].objs[5].cat=1 //category: 0=enemies 1=springs
  222. levels[2].objs[5].leftright=1
  223. levels[2].objs[5].otype=0
  224. levels[2].objs[5].x=352 //pixels not fracunits
  225. levels[2].objs[5].y=640
  226.  
  227. levels[2].objs[6]={}
  228. levels[2].objs[6].cat=1 //category: 0=enemies 1=springs
  229. levels[2].objs[6].leftright=1
  230. levels[2].objs[6].otype=1
  231. levels[2].objs[6].x=2768 //pixels not fracunits
  232. levels[2].objs[6].y=496
  233.  
  234. levels[2].objs[7]={}
  235. levels[2].objs[7].cat=0 //category: 0=enemies 1=springs
  236. levels[2].objs[7].leftright=-1
  237. levels[2].objs[7].otype=0
  238. levels[2].objs[7].x=768 //pixels not fracunits
  239. levels[2].objs[7].y=172
  240.  
  241. levels[2].objs[8]={}
  242. levels[2].objs[8].cat=0 //category: 0=enemies 1=springs
  243. levels[2].objs[8].leftright=-1
  244. levels[2].objs[8].otype=1
  245. levels[2].objs[8].x=1200 //pixels not fracunits
  246. levels[2].objs[8].y=416
  247.  
  248. levels[2].objs[9]={}
  249. levels[2].objs[9].cat=0 //category: 0=enemies 1=springs
  250. levels[2].objs[9].leftright=-1
  251. levels[2].objs[9].otype=1
  252. levels[2].objs[9].x=1824 //pixels not fracunits
  253. levels[2].objs[9].y=624
  254.  
  255. levels[2].objs[10]={}
  256. levels[2].objs[10].cat=1 //category: 0=enemies 1=springs
  257. levels[2].objs[10].leftright=1
  258. levels[2].objs[10].otype=0
  259. levels[2].objs[10].x=3040 //pixels not fracunits
  260. levels[2].objs[10].y=496
  261.  
  262. levels[2].objs[11]={}
  263. levels[2].objs[11].cat=1 //category: 0=enemies 1=springs
  264. levels[2].objs[11].leftright=1
  265. levels[2].objs[11].otype=0
  266. levels[2].objs[11].x=3072 //pixels not fracunits
  267. levels[2].objs[11].y=496
  268.  
  269. levels[2].objs[12]={}
  270. levels[2].objs[12].cat=0 //category: 0=enemies 1=springs
  271. levels[2].objs[12].leftright=-1
  272. levels[2].objs[12].otype=1
  273. levels[2].objs[12].x=2192 //pixels not fracunits
  274. levels[2].objs[12].y=384
  275.  
  276. levels[2].objs[13]={}
  277. levels[2].objs[13].cat=0 //category: 0=enemies 1=springs
  278. levels[2].objs[13].leftright=1
  279. levels[2].objs[13].otype=1
  280. levels[2].objs[13].x=3648 //pixels not fracunits
  281. levels[2].objs[13].y=303
  282.  
  283. levels[2].objs[14]={}
  284. levels[2].objs[14].cat=0 //category: 0=enemies 1=springs
  285. levels[2].objs[14].leftright=1
  286. levels[2].objs[14].otype=0
  287. levels[2].objs[14].x=4624 //pixels not fracunits
  288. levels[2].objs[14].y=287
  289.  
  290. levels[2].objs[15]={}
  291. levels[2].objs[15].cat=0 //category: 0=enemies 1=springs
  292. levels[2].objs[15].leftright=1
  293. levels[2].objs[15].otype=0
  294. levels[2].objs[15].x=4672 //pixels not fracunits
  295. levels[2].objs[15].y=287
  296.  
  297. levels[2].objs[16]={}
  298. levels[2].objs[16].cat=1 //category: 0=enemies 1=springs
  299. levels[2].objs[16].leftright=1
  300. levels[2].objs[16].otype=1
  301. levels[2].objs[16].x=3728 //pixels not fracunits
  302. levels[2].objs[16].y=320
  303.  
  304. levels[2].objs[17]={}
  305. levels[2].objs[17].cat=1 //category: 0=enemies 1=springs
  306. levels[2].objs[17].leftright=1
  307. levels[2].objs[17].otype=1
  308. levels[2].objs[17].x=4928 //pixels not fracunits
  309. levels[2].objs[17].y=320
  310.  
  311. levels[2].levelend={}
  312. levels[2].levelend.x1=4720*FRACUNIT
  313. levels[2].levelend.y1=144*FRACUNIT
  314. levels[2].levelend.x2=4880*FRACUNIT
  315. levels[2].levelend.y2=304*FRACUNIT
  316. levels[2].levelend.event=5002 //executes once everyone is at the end
  317.  
  318. //level 3
  319.  
  320. levels[3].startx=0
  321. levels[3].starty=64
  322.  
  323. levels[3].width=67
  324. levels[3].height=32
  325. 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,}
  326.  
  327.  
  328. levels[3].objamount=0
  329. levels[3].objs={}
  330.  
  331. levels[3].objs[0]={}
  332. levels[3].objs[0].cat=0 //category: 0=enemies 1=springs
  333. levels[3].objs[0].leftright=-1
  334. levels[3].objs[0].otype=3
  335. levels[3].objs[0].x=576 //pixels not fracunits
  336. levels[3].objs[0].y=172
  337.  
  338. levels[3].levelend={}
  339. levels[3].levelend.x1=512*FRACUNIT
  340. levels[3].levelend.y1=64*FRACUNIT
  341. levels[3].levelend.x2=(512*FRACUNIT)+128*FRACUNIT
  342. levels[3].levelend.y2=(64*FRACUNIT)+64*FRACUNIT
  343. levels[3].levelend.event=5001 //executes once everyone is at the end
  344.  
  345. local function clamp(val,minn,maxx)
  346. if (val < minn)
  347. val=minn
  348. end
  349. if (val > maxx)
  350. val=maxx
  351. end
  352. return val
  353. end
  354.  
  355. local function sign(val)
  356. local ret=1
  357. if (val < 0)
  358. ret=-1
  359. end
  360. return ret
  361. end
  362.  
  363. //collision
  364. local function apsa_CreateHitbox(w,h) //creates a hitbox from the center
  365. local box={}
  366. box.w=w
  367. box.h=h //h
  368. return box
  369. end
  370.  
  371. local function apsa_CreateHitboxCorner(x1,y1,x2,y2) //creates a hitbox from top left/bottom right
  372. local box={}
  373. box.w=abs(x1-x2)/2
  374. box.h=abs(y1-y2)/2 //h
  375. return box
  376. end
  377.  
  378. /*local function apsa_HitboxCollide(box1,box2) //offsetless function
  379. local xdist=abs(box1.x - box2.x)
  380. local ydist=abs(box1.y - box2.y)
  381. local ret=false
  382. if (xdist < box1.w+box2.w and ydist < box1.h+box2.h)
  383. ret=true
  384. end
  385. return ret
  386. end*/
  387. local function apsa_HitboxCollide(box1,box2,x1,y1,x2,y2)
  388. local xdist=abs((x1) - (x2))
  389. local ydist=abs((y1) - (y2))
  390. local ret=false
  391. if (xdist < box1.w+box2.w and ydist < box1.h+box2.h)
  392. ret=true
  393. end
  394. return ret
  395. end
  396.  
  397. local apsa_hitboxes = {}
  398. apsa_hitboxes[1] = apsa_CreateHitbox(12*FRACUNIT,16*FRACUNIT) //player hitbox!
  399. apsa_hitboxes[2] = apsa_CreateHitboxCorner(0,0,16*FRACUNIT,16*FRACUNIT) //tile box
  400.  
  401. apsa_hitboxes[3] = apsa_CreateHitbox(15*FRACUNIT,17*FRACUNIT) //spring
  402.  
  403. apsa_hitboxes[4] = apsa_CreateHitbox(32*FRACUNIT,32*FRACUNIT) //dragon
  404.  
  405. local function apsa_PointOnScreen(x,y,radius)
  406. radius = radius or 32
  407. radius = radius*FRACUNIT
  408. local viewposf={}
  409. viewposf.x=0
  410. viewposf.y=0
  411. viewposf.w=640*FRACUNIT
  412. viewposf.h=400*FRACUNIT
  413. for player in players.iterate
  414. viewposf.x=(player.viewpos.x*FRACUNIT)
  415. viewposf.y=(player.viewpos.y*FRACUNIT)
  416. if (x >= viewposf.x-radius and y >= viewposf.y-radius and x <= viewposf.x+viewposf.w+radius and y <= viewposf.y+viewposf.h+radius)
  417. return true
  418. end
  419. end
  420. return false
  421. end
  422.  
  423. local function apsa_PointInRectangle(px,py,x1,y1,x2,y2) //doesn't use hitboxes
  424. if (px >= x1 and py >= y1 and px <= x2 and py <= y2)
  425. return true
  426. end
  427. return false
  428. end
  429.  
  430. local function apsa_NearPlayer(x,y,radius) //returns player that its near or false
  431. radius = radius or 32
  432. radius = radius*FRACUNIT
  433. for player in players.iterate
  434. 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)
  435. return player.obj
  436. end
  437. end
  438. return false
  439. end
  440.  
  441. local function apsa_EnemyGetHit(box,x,y) //returns damage dealt if hit false if not hit
  442. local i=1
  443. while (i <= 80)
  444. 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))
  445. local dmg=server.apsaattacks[i].damage
  446. if (server.apsaattacks[i].otype == 0) //delete sauce
  447. server.apsaattacks[i]=nil //fuck it not moving this to use deleteattack
  448. end
  449. return dmg //this original gameboy is defective i want a refund
  450. end
  451. i = $1 + 1
  452. end
  453. return false
  454. end
  455.  
  456. local function apsa_PlayerGetHit(x,y) //just returns true if you got hit
  457. local i=1
  458. while (i <= 45)
  459. 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))
  460. return true
  461. end
  462. i = $1 + 1
  463. end
  464. return false
  465. end
  466.  
  467. local function apsa_PlayerHitSpring(x,y) //returns false or id
  468. local i=1
  469. while (i <= 15)
  470. if (server.apsasprings[i] ~= nil and apsa_HitboxCollide(apsa_hitboxes[1],apsa_hitboxes[3],x,y,server.apsasprings[i].x,server.apsasprings[i].y))
  471. return i
  472. end
  473. i = $1 + 1
  474. end
  475. return false
  476. end
  477.  
  478. local function apsa_PlaySFXNear(soundnum,x,y,radius) //plays sound for all players near
  479. radius = radius or 32
  480. radius = radius*FRACUNIT
  481. local viewposf={}
  482. viewposf.x=0
  483. viewposf.y=0
  484. viewposf.w=640*FRACUNIT
  485. viewposf.h=400*FRACUNIT
  486. for player in players.iterate
  487. viewposf.x=(player.viewpos.x*FRACUNIT)
  488. viewposf.y=(player.viewpos.y*FRACUNIT)
  489. if (x >= viewposf.x-radius and y >= viewposf.y-radius and x <= viewposf.x+viewposf.w+radius and y <= viewposf.y+viewposf.h+radius)
  490. S_StartSound(nil,soundnum,player)
  491. //S_StartSoundAtVolume(nil,soundnum,clamp(255-(R_PointToDist2(x,y,(viewposf.x+(320*FRACUNIT)),(viewposf.y+(200*FRACUNIT)))/FRACUNIT)/2,0,255),player)
  492. end
  493. end
  494. end
  495.  
  496. //tile data
  497. local tiledata = {} //this array just stores which hitbox index this tile uses
  498. tiledata[1]=0 //if 0 no hitbox
  499. tiledata[2]=2 //box
  500.  
  501. //ok i forgot about the above and i don't know if i actually used it so
  502. //whether you can collide with each tile
  503. local tilecol={true,true,true,false,true,true,true,true,true,true,false,true,true,false,false,true,true,true,true,false,false}
  504.  
  505.  
  506. local function apsa_CollideTile(box,xoff,yoff) //checks for collision with a tile
  507. //this function written by yacker
  508. /*root: local startx = ((xoff-FRACUNIT)/16)/FRACUNIT
  509. root: uhh
  510. root: shouldn't this go
  511. root: to the top left
  512. root: of the collision box
  513. root: instead of x-1
  514. Yacker: no
  515. root: why
  516. Yacker: it goes-wait
  517. Yacker: idk how but fixing that has made collisions now register a pixel above where they should
  518. Yacker: and no matter what hacks i employ i literally can't fix it. not even changing the offset manually
  519. root: so making it actually work with the hitbox...breaks it
  520. Yacker: i mean, it always worked, just probably not as well as one would want
  521. Yacker: it seems to make x collision worse too
  522. Yacker: i think it works better when the code looks wrong
  523. Yacker: so just...use the wrong code...that works...somehow*/
  524. local i = 0
  525. // Determine our starting location, then go one left and up
  526. local startx = ((xoff-FRACUNIT)/16)/FRACUNIT
  527. local curtile = (((yoff-FRACUNIT)/16)/FRACUNIT)*levels[server.currentlevel].width+startx
  528. startx = (startx*FRACUNIT*16)-8*FRACUNIT
  529. local tx = startx
  530. local ty = ((yoff-FRACUNIT)/16)*16
  531. local fu16 = 16*FRACUNIT
  532. while (i < 9)
  533. 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))
  534. return true
  535. end
  536. if (i == 2 or i == 5)
  537. tx = startx
  538. ty = $1 + fu16
  539. curtile = $1 - 2
  540. curtile = $1 + levels[server.currentlevel].width
  541. else
  542. curtile = $1 + 1
  543. tx = $1 + fu16
  544. end
  545. i = $1 + 1
  546. end
  547. return false
  548. end
  549.  
  550. //input
  551. local vk = {}
  552. vk.up=1
  553. vk.down=2
  554. vk.left=3
  555. vk.right=4
  556. vk.jump=5
  557. vk.shoot=6
  558.  
  559.  
  560. local function apsa_PlayerInput(player)
  561. local i=0
  562. while (i < 8)
  563. player.inputsprev[i+1]=player.inputs[i+1]
  564. i = $1 + 1
  565. end
  566.  
  567. if (player.cmd.sidemove < 0)
  568. player.inputs[vk.left]=true
  569. else
  570. player.inputs[vk.left]=false
  571. end
  572. if (player.cmd.sidemove > 0)
  573. player.inputs[vk.right]=true
  574. else
  575. player.inputs[vk.right]=false
  576. end
  577. if (player.cmd.forwardmove < 0)
  578. player.inputs[vk.down]=true
  579. else
  580. player.inputs[vk.down]=false
  581. end
  582. if (player.cmd.forwardmove > 0)
  583. player.inputs[vk.up]=true
  584. else
  585. player.inputs[vk.up]=false
  586. end
  587. player.inputs[vk.jump] = player.cmd.buttons & BT_JUMP
  588. player.inputs[vk.shoot] = player.cmd.buttons & BT_USE
  589. /*player.inputs.pressspin = player.cmd.buttons & BT_USE
  590. player.inputs.pressjump = player.cmd.buttons & BT_JUMP
  591. player.inputs.pressfire = player.cmd.buttons & BT_ATTACK
  592. player.inputs.pressfirenormal = player.cmd.buttons & BT_FIRENORMAL
  593. player.inputs.presstossflag = player.cmd.buttons & BT_TOSSFLAG
  594. player.inputs.presscamleft = player.cmd.buttons & BT_CAMLEFT
  595. player.inputs.presscamright = player.cmd.buttons & BT_CAMRIGHT
  596. player.inputs.pressnextweapon = player.cmd.buttons & BT_WEAPONNEXT*/
  597. end
  598.  
  599. local function button_check(player,val)
  600. return player.inputsprev[val]
  601. end
  602.  
  603. local function button_check_pressed(player,val)
  604. return (player.inputs[val] and not player.inputsprev[val])
  605. end
  606.  
  607. local function button_check_released(player,val)
  608. return (not player.inputs[val] and player.inputsprev[val])
  609. end
  610.  
  611. //RScript
  612. //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"
  613. 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"
  614. script = $1 .. " *5001<MSGLevel 1 Complete!<WAI0050<GTS2<END"
  615.  
  616. script = $1 .. "*5002<KEY<MSGLevel 2 Complete!<WAI0050<PSU<WAI0010<PSU<WAI0007<PSU<WAI0005<PSU<WAI0045<CAM<WAI0120<CAM<GTS3<END"
  617. 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"
  618. 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"
  619.  
  620.  
  621. local function RSC_Draw(v,stplyr,cam)
  622. /*local i=0
  623. v.drawString(8,16,"FUCK"..stplyr.messagelength)
  624. v.drawString(8,32,"FUCK2"..stplyr.scriptpos)
  625. v.drawString(8,48,"FUCK3"..stplyr.rscstate)
  626. while (i < stplyr.messagelength)
  627. v.drawString(8*i,32,stplyr.messagecontent[i].char)
  628. i = $1 + 1
  629. end*/
  630. local i=0
  631. local txpos=0
  632. local curline=0
  633. //var drewline=false
  634. //if (facepic !=0) {
  635. //draw_sprite(sprFacepics,facepic-1,32,248+16)
  636. //}
  637. while (i < server.messagelength-1)
  638. if (server.messagecontent[i].ln ~= curline)
  639. curline=server.messagecontent[i].ln
  640. txpos=0
  641. end
  642. //local txposreal=32+(68*(stplyr.facepic > 0))+txpos
  643. local txposreal=16+txpos
  644. local typos=server.msy+16+1+(16*curline)
  645. //text shake
  646. /*if (messagecontent[i,2]) {
  647. txposreal+=irandom_range(-1,1)
  648. typos+=irandom_range(-1,1)
  649. }*/
  650. //text wave
  651. /*if (messagecontent[i,3]) {
  652. txposreal+=3*cos(sine-0.45*i)
  653. typos+=3*sin(sine-0.45*i)
  654. }*/
  655. //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)
  656. //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)
  657. //draw_text_colour(view_xview+txposreal,view_yview+typos+1,messagecontent[i,0],c_black,c_black,c_black,c_black,1)
  658. //apsa_DrawCharSmall(txposreal,typos,stplyr.messagecontent[i].char,v,stplyr,cam)
  659. v.drawString(txposreal,typos,server.messagecontent[i].char)
  660. //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)
  661.  
  662. //draw_text_colour(txposreal+1,typos,messagecontent[i,0],c_white,c_white,c_white,c_white,1)
  663. txpos = $1 + 8
  664. if (server.messagecontent[i].char == " ")
  665. txpos = $1 - 4
  666. end
  667. i = $1 + 1
  668. end
  669.  
  670. //_
  671. if (server.rscstate == 2 and server.nodtimer&1 == 0 and i >= server.messagelength and i > 0)
  672. //local txposreal=32+(68*(facepic > 0))+txpos
  673. local txposreal=16+txpos
  674. local typos=server.msy+16+1+(16*curline);
  675. //text shake
  676. /*if (textshake) {
  677. txposreal+=irandom_range(-1,1)
  678. typos+=irandom_range(-1,1)
  679. }
  680. //text wave
  681. if (textwave) {
  682. txposreal+=3*cos(sine-0.45*(i))
  683. typos+=3*sin(sine-0.45*(i))
  684. }*/
  685. local unsc="_"
  686. //draw_text_colour(view_xview+txposreal,view_yview+typos+1,unsc,c_black,c_black,c_black,c_black,1)
  687. //draw_text_colour(view_xview+txposreal+1,view_yview+typos,unsc,c_white,c_white,c_white,c_white,1)
  688. end
  689. end
  690. //hud.add(RSC_Draw,"game")
  691.  
  692. //tiles
  693.  
  694. local cachedtiles = {}
  695.  
  696. local function apsa_CacheTiles(v,stplyr,cam)
  697. local cti=1
  698. while (cti <= 20)
  699. cachedtiles[cti+1]=v.cachePatch("PDGT"..tostring(cti))
  700. cti = $1 + 1
  701. end
  702. cachedtiles[1]=0
  703. end
  704.  
  705. //define sprites
  706. local apsa_sprites = {}
  707. apsa_sprites[1] = {}
  708. 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 !)
  709. apsa_sprites[1].len=1 //animation length
  710. apsa_sprites[2] = {}
  711. apsa_sprites[2].name="MRTW" //walk
  712. apsa_sprites[2].len=4
  713. apsa_sprites[3] = {}
  714. apsa_sprites[3].name="MRTJ" //jump
  715. apsa_sprites[3].len=2 //frame 1=jump 2=fall
  716. apsa_sprites[4] = {}
  717. apsa_sprites[4].name="SAUC" //sos
  718. apsa_sprites[4].len=2
  719. apsa_sprites[5] = {}
  720. apsa_sprites[5].name="SOSU" //sauc (up)
  721. apsa_sprites[5].len=2
  722. apsa_sprites[6] = {}
  723. apsa_sprites[6].name="MRTF" //fire sauce
  724. apsa_sprites[6].len=2
  725. apsa_sprites[7] = {}
  726. apsa_sprites[7].name="MRTU" //fire sauce up
  727. apsa_sprites[7].len=2
  728. apsa_sprites[8] = {}
  729. apsa_sprites[8].name="PGCR" //circle
  730. apsa_sprites[8].len=4
  731. apsa_sprites[9] = {}
  732. apsa_sprites[9].name="PGEX" //esplod
  733. apsa_sprites[9].len=3
  734. apsa_sprites[10] = {}
  735. apsa_sprites[10].name="PGHU" //HUD
  736. apsa_sprites[10].len=2
  737. apsa_sprites[11] = {}
  738. apsa_sprites[11].name="PGHP" //HUD Pizza
  739. apsa_sprites[11].len=1
  740. apsa_sprites[12] = {}
  741. apsa_sprites[12].name="PGIT" //intro mr. triangle (the git)
  742. apsa_sprites[12].len=2
  743. apsa_sprites[13] = {}
  744. apsa_sprites[13].name="PGIN" //intro
  745. apsa_sprites[13].len=14
  746. apsa_sprites[14] = {}
  747. apsa_sprites[14].name="PGCG" //circlegunner
  748. apsa_sprites[14].len=3
  749. apsa_sprites[15] = {}
  750. apsa_sprites[15].name="PGCB" //circlegunner bullet
  751. apsa_sprites[15].len=1
  752. apsa_sprites[16] = {}
  753. apsa_sprites[16].name="PGSP" //spring
  754. apsa_sprites[16].len=1
  755. apsa_sprites[17] = {}
  756. apsa_sprites[17].name="PGDS" //nintendo ds (diagonal spring)
  757. apsa_sprites[17].len=1
  758. apsa_sprites[18] = {}
  759. apsa_sprites[18].name="PGMS" //mansion
  760. apsa_sprites[18].len=2
  761. apsa_sprites[19] = {}
  762. apsa_sprites[19].name="PGMB" //mansion big (for stage 3 background)
  763. apsa_sprites[19].len=1
  764. apsa_sprites[20] = {}
  765. apsa_sprites[20].name="PGDG" //dragon
  766. apsa_sprites[20].len=2
  767. apsa_sprites[21] = {}
  768. apsa_sprites[21].name="PGFR" //dragon fire
  769. apsa_sprites[21].len=2
  770. apsa_sprites[22] = {}
  771. apsa_sprites[22].name="PGEN" //ending
  772. apsa_sprites[22].len=9
  773.  
  774. //drawing
  775.  
  776. local function apsa_DrawSprite(sprite,frame,x,y,lr,v,stplyr,cam)
  777. //frame is in fracunits
  778. frame = ($1 / FRACUNIT) % apsa_sprites[sprite].len
  779. local str=apsa_sprites[sprite].name..tostring(frame)
  780. //if lr is -1 add l if 1 add r (maybe it should default to r if 0 or above? idk)
  781. if (lr == -1)
  782. str = $1.."L"
  783. elseif (lr == 1)
  784. str = $1.."R"
  785. end
  786. local patch=v.cachePatch(str)
  787. v.drawScaled(x*FRACUNIT/2,y*FRACUNIT/2,FRACUNIT/2,patch)
  788. end
  789.  
  790. local function apsa_DrawSpriteView(sprite,frame,x,y,lr,v,stplyr,cam,color)
  791. color = color or v.getColormap(0,0)
  792. //frame is in fracunits
  793. frame = ($1 / FRACUNIT) % apsa_sprites[sprite].len
  794. local str=apsa_sprites[sprite].name..tostring(frame)
  795. //if lr is -1 add l if 1 add r (maybe it should default to r if 0 or above? idk)
  796. if (lr == -1)
  797. str = $1.."L"
  798. elseif (lr == 1)
  799. str = $1.."R"
  800. end
  801. local patch=v.cachePatch(str)
  802. v.drawScaled((x-(stplyr.viewpos.x))*FRACUNIT/2,(y-(stplyr.viewpos.y))*FRACUNIT/2,FRACUNIT/2,patch,0,color)
  803. end
  804.  
  805. local function apsa_DrawSpriteViewScaled(sprite,frame,x,y,lr,v,stplyr,cam,scale,color)
  806. color = color or v.getColormap(0,0)
  807. x = $1 * 32768
  808. y = $1 * 32768
  809. //frame is in fracunits
  810. frame = ($1 / FRACUNIT) % apsa_sprites[sprite].len
  811. local str=apsa_sprites[sprite].name..tostring(frame)
  812. //if lr is -1 add l if 1 add r (maybe it should default to r if 0 or above? idk)
  813. if (lr == -1)
  814. str = $1.."L"
  815. elseif (lr == 1)
  816. str = $1.."R"
  817. end
  818. local patch=v.cachePatch(str)
  819. v.drawScaled(x-(stplyr.viewpos.x*32768),y-(stplyr.viewpos.y*32768),scale,patch,0,color)
  820. end
  821.  
  822. local function apsa_DrawTiles(v,stplyr,cam) //edited by yacker to work with the view
  823. if (cachedtiles[1] == nil)
  824. apsa_CacheTiles(v,stplyr,cam)
  825. end
  826. local i=0
  827. //local len=levels[server.currentlevel].width*levels[server.currentlevel].height
  828. local xits = 41
  829. local yits = 26
  830. local xx=0
  831. local yy=0
  832. local drawx = -(stplyr.viewpos.x) % 16
  833. local storex = drawx
  834. local drawy = -(stplyr.viewpos.y) % 16
  835. local curtile=0
  836. local tile = ((stplyr.viewpos.y/16)*levels[server.currentlevel].width)+(stplyr.viewpos.x/16)+1
  837. local starttile = tile
  838. while (i < yits)
  839. local i2 = 0
  840. while (i2 < xits)
  841. curtile=levels[server.currentlevel].tiles[tile]
  842. if (curtile ~= 0)
  843. v.drawScaled(drawx*FRACUNIT/2,drawy*FRACUNIT/2,FRACUNIT/2,cachedtiles[curtile+1])
  844. end
  845. drawx = $1 + 16
  846. tile = $1 + 1
  847. i2 = $1 + 1
  848. end
  849. tile = starttile + levels[server.currentlevel].width
  850. starttile = tile
  851. drawy = $1 + 16
  852. drawx = storex
  853. i = $1 + 1
  854. end
  855. end
  856.  
  857. local function apsa_DrawStringSmallCenter(x,y,str,v,stplyr,cam)
  858. //because srb2 vanilla text machine broke
  859. local w=0
  860. local i=1
  861. //calculate width
  862. while (i <= string.len(str))
  863. if (string.sub(str,i,i) == " ")
  864. w = $1 + 4
  865. else
  866. w = $1 + 8
  867. end
  868. i = $1 + 1
  869. end
  870. x = $1 - (w/2)
  871. i=1
  872. local ltr=""
  873. local ltrg=0
  874. local chr=""
  875. local byte=0
  876. while (i <= string.len(str))
  877. chr=string.sub(str,i,i)
  878. if (chr ~= " ")
  879. byte=string.byte(chr)
  880. if (byte < 100)
  881. ltr="0"..tostring(byte)
  882. else
  883. ltr=tostring(byte)
  884. end
  885. ltrg=v.cachePatch("STCFN"..ltr)
  886. v.drawScaled(x*FRACUNIT/2,y*FRACUNIT/2,FRACUNIT/2,ltrg)
  887. x = $1 + 8
  888. else
  889. x = $1 + 4
  890. end
  891. i = $1 + 1
  892. end
  893. end
  894.  
  895. local function apsa_DrawCharSmall(x,y,str,v,stplyr,cam)
  896. local ltr=""
  897. local ltrg=0
  898. local byte=0
  899. if (str ~= " ")
  900. byte=string.byte(string.sub(str,1,1))
  901. //print(byte)
  902. if (byte < 100)
  903. ltr="0"..tostring(byte)
  904. else
  905. ltr=tostring(byte)
  906. end
  907. ltrg=v.cachePatch("STCFN"..ltr)
  908. v.drawScaled(x*FRACUNIT/2,y*FRACUNIT/2,FRACUNIT/2,ltrg)
  909. end
  910. end
  911.  
  912. local function apsa_DrawPlayers(v,stplyr,cam)
  913. local plrcol=v.getColormap(-1,SKINCOLOR_RED) //default
  914. for player in players.iterate
  915. //local spr=v.cachePatch("AMPS_R")
  916. //v.draw(player.obj.x/FRACUNIT,player.obj.y/FRACUNIT,spr)
  917. //v.drawFill((player.obj.x/FRACUNIT)-12,(player.obj.y/FRACUNIT)-16,24,32,128)
  918. //apsa_DrawSprite(1,65535,player.obj.x/FRACUNIT,player.obj.y/FRACUNIT,1,v,stplyr,cam)
  919. //apsa_DrawSprite(player.obj.spriteindex,player.obj.frame,player.obj.x/FRACUNIT,player.obj.y/FRACUNIT,player.obj.leftright,v,stplyr,cam)
  920. //draw player name and change player color if multiplayer
  921. if (server.pdgstate == 0 and not player.dead)
  922. if (multiplayer)
  923. //v.drawString((player.obj.x/FRACUNIT)-stplyr.viewpos.x,((player.obj.y/FRACUNIT)-28)-stplyr.viewpos.y,player.name,V_NOSCALEPATCH,"center")
  924. apsa_DrawStringSmallCenter((player.obj.x/FRACUNIT)-stplyr.viewpos.x,((player.obj.y/FRACUNIT)-28)-stplyr.viewpos.y,player.name,v,stplyr,cam)
  925. plrcol=v.getColormap(-1,player.mo.color)
  926. end
  927. if ((player.tempinvin == 0) or (player.tempinvin ~= 0 and player.tempinvin&1 == 0))
  928. apsa_DrawSpriteView(player.obj.spriteindex,player.obj.frame,player.obj.x/FRACUNIT,(player.obj.y/FRACUNIT)-2,player.obj.leftright,v,stplyr,cam,plrcol)
  929. end
  930. end
  931. //v.drawString(0,0,"FUCKING Y SHIT:"..tostring(player.obj.y))
  932. //v.drawString(0,16,"FUCKING YSPD SHIT:"..tostring(player.obj.yspeed))
  933. end
  934. end
  935.  
  936. //object draw functions
  937. local objfuncs = {}
  938. objfuncs.effectcreate = {}
  939. objfuncs.enemycreate = {}
  940. objfuncs.attackcreate = {}
  941. objfuncs.springcreate = {}
  942. objfuncs.effectstep = {}
  943. objfuncs.enemystep = {}
  944. objfuncs.attackstep = {}
  945. //no spring step because..they don't need to run code every frame
  946. objfuncs.effectdraw = {}
  947. objfuncs.enemydraw = {}
  948. objfuncs.attackdraw = {}
  949. objfuncs.springdraw = {}
  950.  
  951. //attacks
  952. objfuncs.attackdraw[0] = function(obj,v,stplyr,cam)
  953. if (obj.up)
  954. apsa_DrawSpriteView(5,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,0,v,stplyr,cam)
  955. else
  956. apsa_DrawSpriteView(4,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  957. end
  958. end
  959. //enemies
  960. objfuncs.enemydraw[0] = function(obj,v,stplyr,cam)
  961. apsa_DrawSpriteView(8,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  962. if (obj.hurttimer > 0) //draw flash
  963. apsa_DrawSpriteView(8,2*FRACUNIT,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  964. end
  965. end
  966. objfuncs.enemydraw[1] = function(obj,v,stplyr,cam)
  967. if (obj.hurttimer == 0)
  968. apsa_DrawSpriteView(14,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  969. else
  970. apsa_DrawSpriteView(14,2*FRACUNIT,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  971. end
  972. end
  973. objfuncs.enemydraw[2] = function(obj,v,stplyr,cam)
  974. apsa_DrawSpriteView(15,0,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  975. end
  976. objfuncs.enemydraw[3] = function(obj,v,stplyr,cam) //dragon
  977. if (obj.hurttimer % 2 == 0)
  978. apsa_DrawSpriteView(obj.sprite,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  979. end
  980. end
  981. objfuncs.enemydraw[4] = function(obj,v,stplyr,cam) //dragon bullet
  982. apsa_DrawSpriteView(21,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  983. end
  984. //effects
  985. objfuncs.effectdraw[0] = function(obj,v,stplyr,cam)
  986. apsa_DrawSpriteView(9,obj.frame,obj.x/FRACUNIT,obj.y/FRACUNIT,0,v,stplyr,cam)
  987. end
  988. //springs
  989. objfuncs.springdraw[0] = function(obj,v,stplyr,cam)
  990. apsa_DrawSpriteView(16,0,obj.x/FRACUNIT,obj.y/FRACUNIT,0,v,stplyr,cam)
  991. end
  992. objfuncs.springdraw[1] = function(obj,v,stplyr,cam)
  993. apsa_DrawSpriteView(17,0,obj.x/FRACUNIT,obj.y/FRACUNIT,obj.leftright,v,stplyr,cam)
  994. end
  995.  
  996.  
  997. local function apsa_DrawObjects(v,stplyr,cam)
  998. local i=1
  999. while (i <= 80)
  1000. if (server.apsaattacks[i] ~= nil)
  1001. objfuncs.attackdraw[server.apsaattacks[i].otype](server.apsaattacks[i],v,stplyr,cam)
  1002. end
  1003. i = $1 + 1
  1004. end
  1005. i=1
  1006. while (i <= 45)
  1007. if (server.apsaenemies[i] ~= nil)
  1008. objfuncs.enemydraw[server.apsaenemies[i].otype](server.apsaenemies[i],v,stplyr,cam)
  1009. end
  1010. i = $1 + 1
  1011. end
  1012. i=1
  1013. while (i <= 45)
  1014. if (server.apsaeffects[i] ~= nil)
  1015. objfuncs.effectdraw[server.apsaeffects[i].otype](server.apsaeffects[i],v,stplyr,cam)
  1016. end
  1017. i = $1 + 1
  1018. end
  1019. i=1
  1020. while (i <= 15)
  1021. if (server.apsasprings[i] ~= nil)
  1022. objfuncs.springdraw[server.apsasprings[i].otype](server.apsasprings[i],v,stplyr,cam)
  1023. end
  1024. i = $1 + 1
  1025. end
  1026. end
  1027.  
  1028. //draw_tiled made by yacker
  1029. local function draw_tiled(v,camx,camy,patch,width,height,flags)
  1030. flags = flags or 0
  1031. local i = 0
  1032. local xits
  1033. local yits
  1034. // Support different draw sizes
  1035. if (flags & V_SMALLSCALEPATCH)
  1036. xits = FixedCeil(FixedDiv(640*FRACUNIT,width*FRACUNIT))/FRACUNIT+1
  1037. yits = FixedCeil(FixedDiv(400*FRACUNIT,height*FRACUNIT))/FRACUNIT+1
  1038. else
  1039. xits = FixedCeil(FixedDiv(320*FRACUNIT,width*FRACUNIT))/FRACUNIT+1
  1040. yits = FixedCeil(FixedDiv(200*FRACUNIT,height*FRACUNIT))/FRACUNIT+1
  1041. end
  1042. // Modulo our start position by width, then subtract width again so we get the correct place
  1043. camx = ((-$1) % width)
  1044. // Again with height
  1045. camy = ((-$1) % height)
  1046. // And now we just iterate drawing
  1047. local drawx = camx
  1048. local drawy = camy
  1049. while (i < yits)
  1050. local i2 = 0
  1051. while (i2 < xits)
  1052. v.drawScaled(drawx*FRACUNIT/2,drawy*FRACUNIT/2,FRACUNIT/2,patch,flags)
  1053. drawx = $1 + width
  1054. i2 = $1 + 1
  1055. end
  1056. drawx = camx
  1057. i = $1 + 1
  1058. drawy = $1 + height
  1059. end
  1060. end
  1061.  
  1062. local function draw_tiled_hor(v,camx,camy,patch,width,height,flags)
  1063. flags = flags or 0
  1064. local i = 0
  1065. local xits
  1066. // Support different draw sizes
  1067. if (flags & V_SMALLSCALEPATCH)
  1068. xits = FixedCeil(FixedDiv(640*FRACUNIT,width*FRACUNIT))/FRACUNIT+1
  1069. else
  1070. xits = FixedCeil(FixedDiv(320*FRACUNIT,width*FRACUNIT))/FRACUNIT+1
  1071. end
  1072. // Modulo our start position by width
  1073. camx = ((-$1) % width)
  1074. // And now we just iterate drawing
  1075. while (i < xits)
  1076. v.drawScaled(camx*FRACUNIT/2,camy*FRACUNIT/2,FRACUNIT/2,patch,flags)
  1077. camx = $1 + width
  1078. i = $1 + 1
  1079. end
  1080. end
  1081.  
  1082. local function apsa_DrawHUD(player,x,leftright,v,stplyr,cam)
  1083. apsa_DrawSprite(10,0,x,0,leftright,v,stplyr,cam)
  1084. local xx=4+16+10
  1085. local i=0
  1086. if (splitscreen and player == players[1])
  1087. xx=640-(4+16+10)
  1088. while (i < player.hp)
  1089. apsa_DrawSprite(11,0,xx-(18*i),35,0,v,stplyr,cam)
  1090. i = $1 + 1
  1091. end
  1092. else
  1093. while (i < player.hp)
  1094. apsa_DrawSprite(11,0,xx+(18*i),35,0,v,stplyr,cam)
  1095. i = $1 + 1
  1096. end
  1097. end
  1098. end
  1099.  
  1100. local function TestDraw(v, stplyr, cam)
  1101. //v.drawString(8,8,"ass")
  1102. if (mapheaderinfo[gamemap].pdglevel == nil) //map header variable
  1103. return
  1104. end
  1105. //draw bg
  1106. if (server.pdgstate == 0)
  1107. local bg=v.cachePatch("PDGBG1")
  1108. v.draw(0,0,bg)
  1109. bg=v.cachePatch("PDGBG2")
  1110. v.draw(0,0,bg)
  1111. bg=v.cachePatch("PDGBG3")
  1112. 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)
  1113. bg=v.cachePatch("PDGBG4")
  1114. 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)
  1115. bg=v.cachePatch("PDGBG5")
  1116. 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)
  1117.  
  1118. if (server.currentlevel == 1)
  1119. apsa_DrawStringSmallCenter(128-stplyr.viewpos.x,(160)-stplyr.viewpos.y,"Press Spin to Shoot!",v,stplyr,cam)
  1120. end
  1121.  
  1122. //draw mansion bg
  1123. if (server.currentlevel == 2)
  1124. 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)
  1125. end
  1126. if (server.currentlevel == 3)
  1127. apsa_DrawSpriteViewScaled(19,0,528,336,0,v,stplyr,cam,2*FRACUNIT)
  1128. end
  1129. //draw game stuff
  1130. apsa_DrawTiles(v,stplyr,cam)
  1131. apsa_DrawObjects(v,stplyr,cam)
  1132. apsa_DrawPlayers(v,stplyr,cam)
  1133.  
  1134. if (not splitscreen)
  1135. apsa_DrawHUD(stplyr,0,-1,v,stplyr,cam)
  1136. else
  1137. apsa_DrawHUD(players[0],0,-1,v,stplyr,cam)
  1138. apsa_DrawHUD(players[1],448,1,v,stplyr,cam)
  1139. end
  1140. end
  1141.  
  1142. if (server.pdgstate >= 1)
  1143. v.drawFill(0,0,320,200,31)
  1144. if (server.introsprite ~= 0)
  1145. apsa_DrawSprite(server.introsprite,server.introframe*FRACUNIT,320,200,0,v,stplyr,cam)
  1146. end
  1147. if (server.introflash > 0)
  1148. v.drawFill(0,0,320,200,0)
  1149. end
  1150. end
  1151.  
  1152. RSC_Draw(v,stplyr,cam)
  1153. end
  1154.  
  1155. //BLEACH
  1156. //objects
  1157. local function apsa_CreateTriangleEngineObject() //triangle engine = platformer code (which ironically has no triangles in this port)
  1158. local obj={}
  1159. obj.x=0
  1160. obj.y=0
  1161. obj.xspeed=0
  1162. obj.yspeed=0
  1163. obj.momu=0
  1164. obj.momd=0
  1165. obj.moml=0
  1166. obj.momr=0
  1167. obj.ystore=0
  1168. obj.executeagain=0
  1169. obj.onland=0
  1170. obj.leftright=1
  1171. return obj
  1172. end
  1173.  
  1174. local function apsa_TriangleEngineLR(obj)
  1175. while (obj.executeagain == 1)
  1176. if (obj.momr > 0 and not apsa_CollideTile(apsa_hitboxes[1],obj.x+FRACUNIT,obj.y))
  1177. obj.x = $1 + FRACUNIT
  1178. obj.momr = $1 - FRACUNIT
  1179. end
  1180.  
  1181. if (obj.moml > 0 and not apsa_CollideTile(apsa_hitboxes[1],obj.x-FRACUNIT,obj.y))
  1182. obj.x = $1 - FRACUNIT
  1183. obj.moml = $1 - FRACUNIT
  1184. end
  1185.  
  1186. if (obj.momr <= 0 and obj.moml <= 0)
  1187. obj.executeagain=0
  1188. end
  1189.  
  1190. if (apsa_CollideTile(apsa_hitboxes[1],obj.x+FRACUNIT,obj.y) and obj.xspeed > 0)
  1191. obj.xspeed=0
  1192. obj.momr=0
  1193. return true
  1194. end
  1195. if (apsa_CollideTile(apsa_hitboxes[1],obj.x-FRACUNIT,obj.y) and obj.xspeed < 0)
  1196. obj.xspeed=0
  1197. obj.moml=0
  1198. return true
  1199. end
  1200. end
  1201. end
  1202.  
  1203. local function apsa_TriangleEngineUD(obj)
  1204. while (obj.executeagain == 1)
  1205. if (obj.momu > 0 and not apsa_CollideTile(apsa_hitboxes[1],obj.x,obj.y-FRACUNIT))
  1206. obj.y = $1 - FRACUNIT
  1207. obj.momu = $1 - FRACUNIT
  1208. end
  1209.  
  1210. if (obj.momd > 0 and not apsa_CollideTile(apsa_hitboxes[1],obj.x,obj.y+FRACUNIT))
  1211. obj.y = $1 + FRACUNIT
  1212. obj.momd = $1 - FRACUNIT
  1213. end
  1214.  
  1215. if (obj.momu <= 0 and obj.momd <= 0)
  1216. obj.executeagain=0
  1217. end
  1218.  
  1219. if (apsa_CollideTile(apsa_hitboxes[1],obj.x,obj.y-FRACUNIT))
  1220. obj.yspeed=0
  1221. obj.momu=0
  1222. return true
  1223. end
  1224. if (apsa_CollideTile(apsa_hitboxes[1],obj.x,obj.y+FRACUNIT))
  1225. obj.yspeed=0
  1226. obj.momd=0
  1227. obj.onland=true
  1228. return true
  1229. else
  1230. obj.onland=false
  1231. end
  1232. end
  1233. end
  1234.  
  1235. local function apsa_TriangleEngineStep(obj)
  1236. //x momentum
  1237. if (obj.xspeed > 0)
  1238. obj.momr = $1 + obj.xspeed
  1239. end
  1240. if (obj.xspeed < 0)
  1241. obj.moml = $1 - obj.xspeed
  1242. end
  1243. if (obj.xspeed == 0)
  1244. obj.momr=0
  1245. obj.moml=0
  1246. end
  1247. //y momentum
  1248. if (obj.yspeed > 0)
  1249. obj.momd = $1 + obj.yspeed
  1250. end
  1251. if (obj.yspeed < 0)
  1252. obj.momu = $1 - obj.yspeed
  1253. end
  1254. if (obj.yspeed == 0)
  1255. obj.momu=0
  1256. obj.momd=0
  1257. end
  1258.  
  1259. obj.ystore=obj.y
  1260. apsa_TriangleEngineLR(obj)
  1261. obj.executeagain=1
  1262. apsa_TriangleEngineUD(obj)
  1263. obj.executeagain=1
  1264.  
  1265. obj.yspeed = $1 + 12285//7167 //triangle engine gravity (adjusted for 35fps)
  1266. if (obj.yspeed > 6*FRACUNIT)
  1267. obj.yspeed = 6*FRACUNIT
  1268. end
  1269. end
  1270.  
  1271. local function DeleteEffect(id)
  1272. server.apsaeffects[id] = nil
  1273. end
  1274.  
  1275. local function DeleteEnemy(id)
  1276. server.apsaenemies[id] = nil
  1277. end
  1278.  
  1279. local function DeleteAttack(id)
  1280. server.apsaattacks[id] = nil
  1281. end
  1282.  
  1283.  
  1284. //create/step functions
  1285. //attacks
  1286. objfuncs.attackcreate[0] = function() //sauce
  1287. local obj={}
  1288. obj.x=0
  1289. obj.y=0
  1290. obj.timer=55
  1291. obj.leftright=1
  1292. obj.up=0
  1293. obj.frame=0
  1294. obj.damage=FRACUNIT
  1295. obj.hitboxid=2 //for if i add special attack
  1296. return obj
  1297. end
  1298. //enemy creates
  1299. objfuncs.enemycreate[0] = function() //circle
  1300. local obj=apsa_CreateTriangleEngineObject()
  1301. obj.moving=false //used so friction only happens when it stops trying to move
  1302. obj.canhurt=true
  1303. obj.frame=0
  1304. obj.hurttimer = 0
  1305. obj.hp = 2*FRACUNIT
  1306. obj.hitboxid=1
  1307. return obj
  1308. end
  1309. objfuncs.enemycreate[1] = function() //circlegunner
  1310. local obj=apsa_CreateTriangleEngineObject()
  1311. obj.leftright=-1
  1312. obj.canhurt=false
  1313. obj.frame=0
  1314. obj.hurttimer = 0
  1315. obj.hp = 2*FRACUNIT
  1316. obj.hitboxid=1
  1317. obj.shoottimer=0
  1318. obj.state=0
  1319. return obj
  1320. end
  1321. objfuncs.enemycreate[2] = function() //circlegunner bullet
  1322. local obj=apsa_CreateTriangleEngineObject()
  1323. obj.leftright=-1
  1324. obj.canhurt=true
  1325. obj.timer=0
  1326. obj.hitboxid=2
  1327. return obj
  1328. end
  1329. objfuncs.enemycreate[3] = function() //dragon
  1330. local obj={}
  1331. obj.x=0
  1332. obj.y=0
  1333. obj.leftright=-1
  1334. obj.canhurt=true
  1335. obj.timer=0
  1336. obj.hitboxid=2
  1337. obj.sprite=20
  1338. obj.frame=0
  1339. obj.framespeed=6
  1340. obj.ft = 0
  1341. obj.state = 0
  1342. obj.target = 0
  1343. obj.targx = 0
  1344. obj.targy = 0
  1345. obj.hp = 16
  1346. obj.hurttimer = 0
  1347. obj.fire = {}
  1348. obj.fireids = {}
  1349. obj.fireradius = 0
  1350. obj.targetradius = 0
  1351. obj.firerot = 0
  1352. obj.targetrot = 0
  1353. obj.radiusstate = 0 // whether to grow larger or shrink
  1354. obj.rotstate = 0 // ditto
  1355. obj.radiustime = 0 // smooth transition between radius states
  1356. obj.rottime = 0 // ditto
  1357. return obj
  1358. end
  1359. objfuncs.enemycreate[4] = function() //dragon bullet (should aim for player)
  1360. local obj={}
  1361. obj.x=0
  1362. obj.y=0
  1363. obj.xsp = 0
  1364. obj.ysp = 0
  1365. obj.leftright=0
  1366. obj.canhurt=true
  1367. obj.timer=0
  1368. obj.hitboxid=2
  1369. obj.sprite=21
  1370. obj.frame=0
  1371. obj.framespeed=0
  1372. return obj
  1373. end
  1374. //effect creates
  1375. objfuncs.effectcreate[0] = function() //esplosion
  1376. local obj={}
  1377. obj.x=0
  1378. obj.y=0
  1379. obj.xspeed=0
  1380. obj.yspeed=0
  1381. obj.frame=0
  1382. return obj
  1383. end
  1384. //spring creates
  1385. objfuncs.springcreate[0] = function() //spring
  1386. local obj={}
  1387. obj.x=0
  1388. obj.y=0
  1389. obj.leftright=0
  1390. obj.otype=0
  1391. return obj
  1392. end
  1393. objfuncs.springcreate[1] = function() //diagonal spring
  1394. local obj={}
  1395. obj.x=0
  1396. obj.y=0
  1397. obj.leftright=1
  1398. obj.otype=0
  1399. return obj
  1400. end
  1401.  
  1402. //create object functions
  1403. //enemy/other objects
  1404. local function CreateEnemy(enemytype,x,y,leftright) //x and y are pixels not fracunits
  1405. //0=circle 1=circlegunner (high quality shapes)
  1406. leftright = leftright or -1
  1407. local i=1
  1408. local succ=false //succ-essful (succ)
  1409. while (i <= 45)
  1410. if (server.apsaenemies[i] == nil)
  1411. server.apsaenemies[i] = {}
  1412. server.apsaenemies[i] = objfuncs.enemycreate[enemytype]()
  1413.  
  1414. server.apsaenemies[i].leftright=leftright
  1415. server.apsaenemies[i].x=x*FRACUNIT
  1416. server.apsaenemies[i].y=y*FRACUNIT
  1417. server.apsaenemies[i].otype=enemytype
  1418. succ=i
  1419. i=46
  1420. end
  1421. i = $1 + 1
  1422. end
  1423. if (not succ) //ANGERY
  1424. //print("ran out of space for enemies fire root")
  1425. end
  1426. return succ
  1427. end
  1428.  
  1429. local function CreateEffect(effecttype,x,y,leftright) //x and y are pixels not fracunits
  1430. //0=sauce splash 1=explosion
  1431. leftright = leftright or -1
  1432. local i=1
  1433. local succ=false //succ-essful (succ)
  1434. while (i <= 45)
  1435. if (server.apsaeffects[i] == nil)
  1436. server.apsaeffects[i] = {}
  1437. server.apsaeffects[i] = objfuncs.effectcreate[effecttype]()
  1438.  
  1439. server.apsaeffects[i].leftright=leftright
  1440. server.apsaeffects[i].x=x*FRACUNIT
  1441. server.apsaeffects[i].y=y*FRACUNIT
  1442. server.apsaeffects[i].otype=effecttype
  1443. succ=i
  1444. i=46
  1445. //print("CREATED ESPLOD AT "..i.." "..server.apsaeffects[i])
  1446. end
  1447. i = $1 + 1
  1448. end
  1449. if (not succ) //ANGERY
  1450. //print("oh boy that sauce won't have as many splashes fire root")
  1451. end
  1452. return succ
  1453. end
  1454.  
  1455. local function CreateAttack(attacktype,x,y,leftright) //x and y are pixels not fracunits
  1456. //0=sauce 1=blast
  1457. leftright = leftright or -1
  1458. local i=1
  1459. local succ=false //succ-essful (succ)
  1460. while (i <= 80)
  1461. if (server.apsaattacks[i] == nil)
  1462. server.apsaattacks[i] = objfuncs.attackcreate[attacktype]()
  1463.  
  1464. server.apsaattacks[i].leftright=leftright
  1465. server.apsaattacks[i].x=x*FRACUNIT
  1466. server.apsaattacks[i].y=y*FRACUNIT
  1467. server.apsaattacks[i].otype=attacktype
  1468. succ=i
  1469. i=81
  1470. end
  1471. i = $1 + 1
  1472. end
  1473. if (not succ) //ANGERY
  1474. 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")
  1475. end
  1476. return succ
  1477. end
  1478.  
  1479. local function CreateSpring(springtype,x,y,leftright) //x and y are pixels not fracunits
  1480. //0=sauce 1=blast
  1481. leftright = leftright or -1
  1482. local i=1
  1483. local succ=false //succ-essful (succ)
  1484. while (i <= 15)
  1485. if (server.apsasprings[i] == nil)
  1486. server.apsasprings[i] = objfuncs.springcreate[springtype]()
  1487.  
  1488. server.apsasprings[i].leftright=leftright
  1489. server.apsasprings[i].x=x*FRACUNIT
  1490. server.apsasprings[i].y=y*FRACUNIT
  1491. server.apsasprings[i].otype=springtype
  1492. succ=i
  1493. i=81
  1494. end
  1495. i = $1 + 1
  1496. end
  1497. if (not succ) //ANGERY
  1498. print("theres the problem! too many springs! you know what they say..all bounce pads bounce lads!")
  1499. end
  1500. return succ
  1501. end
  1502.  
  1503. //game
  1504.  
  1505. local function apsa_DeletePlayers()
  1506. for player in players.iterate
  1507. player.viewpos.x=0
  1508. player.viewpos.y=0
  1509. player.obj={}
  1510. end
  1511. end
  1512.  
  1513. local function apsa_ResetPlayers()
  1514. for player in players.iterate
  1515. player.obj.x=levels[server.currentlevel].startx*FRACUNIT
  1516. player.obj.y=levels[server.currentlevel].starty*FRACUNIT
  1517. player.obj.shoottimer=0
  1518. player.obj.shootup=0
  1519. player.obj.spriteindex=1
  1520. player.obj.frame=0
  1521. player.obj.framespeed=0
  1522. player.viewpos.x=0
  1523. player.viewpos.y=0
  1524. player.campos.x=0
  1525. player.campos.y=0
  1526. player.dead=false
  1527. player.deathtimer=0
  1528. player.hp=4
  1529. player.tempinvin=0
  1530. player.levelcomplete=false
  1531. end
  1532. end
  1533.  
  1534. local function apsa_InitObjectArrays()
  1535. server.apsaeffects = {} //explosions, sos splashes and stuff (45)
  1536. server.apsaenemies = {} //this includes enemy bullets (45)
  1537. server.apsaattacks = {} //player attacks (3 bullets on screen + blast * ..lets say 20 because >32 players top kek = 80 slots)
  1538. server.apsasprings = {} //15
  1539. end
  1540.  
  1541. local function apsa_LoadLevelObjects()
  1542. /* levels[1].objs={}
  1543. levels[1].objamount=1
  1544.  
  1545. levels[1].objs[0]={}
  1546. levels[1].objs[0].otype=0
  1547. levels[1].objs[0].x=64 //pixels not fracunits
  1548. levels[1].objs[0].y=128*/
  1549. local i=0
  1550. while (i < levels[server.currentlevel].objamount)
  1551. if (levels[server.currentlevel].objs[i].cat == 0)
  1552. 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)
  1553. else
  1554. 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)
  1555. end
  1556. i = $1 + 1
  1557. end
  1558. end
  1559.  
  1560. local function apsa_GotoLevel(level)
  1561. server.currentlevel=level
  1562. server.pdgstate=0
  1563. server.lvlcomplete=false
  1564. apsa_InitObjectArrays()
  1565. apsa_LoadLevelObjects()
  1566. apsa_ResetPlayers()
  1567. if (level == 1)
  1568. S_ChangeMusic("SUNS")
  1569. end
  1570. if (level == 3)
  1571. server.bossevent=true
  1572. server.movementmode=1
  1573. S_StopMusic()
  1574. end
  1575. for player in players.iterate
  1576. player.hp=4
  1577. end
  1578. end
  1579.  
  1580. //RSCRIPT FUCK SHIT ASS COCK FUCK BLEACH TIDE PODS
  1581. local function RSC_ClearMsg()
  1582. //clear message
  1583. local i=0
  1584. while (i <= 128)
  1585. server.messagecontent[i].char=""
  1586. server.messagecontent[i].col=server.rscript_defcolor
  1587. server.messagecontent[i].shk=0
  1588. server.messagecontent[i].wav=0
  1589. server.messagecontent[i].ln=0
  1590. i = $1 + 1
  1591. end
  1592. server.textcolor=server.rscript_defcolor
  1593. server.textshake=false
  1594. server.textwave=false
  1595. server.textline=0
  1596. server.messagelength=1
  1597. server.messagepos=0
  1598. end
  1599.  
  1600. local function RSC_Command()
  1601. local ret=false
  1602. local char=string.sub(script,server.scriptpos,server.scriptpos)//string_char_at(script,scriptpos)
  1603. //print(player.scriptpos)
  1604. //print(char)
  1605. if (char == "<")
  1606. ret=true
  1607. server.scriptpos= $1 + 1
  1608. local rsccommand=string.sub(script,server.scriptpos,server.scriptpos+2)//string_copy(script,scriptpos,3);
  1609. //print(rsccommand.."AA")
  1610. server.scriptpos = $1 + 3
  1611. //check for commands here
  1612. if (rsccommand == "KEY")
  1613. server.movementmode=1
  1614. //print("KEY")
  1615. elseif (rsccommand == "FRE")
  1616. server.movementmode=0
  1617. elseif (rsccommand == "MSG")
  1618. server.messageon=1
  1619. //player.msy=248
  1620. server.msy=120
  1621. server.rscinterval=0
  1622.  
  1623. RSC_ClearMsg()
  1624. //print("MSG")
  1625. elseif (rsccommand == "MS2")
  1626. server.messageon=1
  1627. server.msy=248
  1628. server.rscinterval=0
  1629.  
  1630. RSC_ClearMsg()
  1631. elseif (rsccommand == "MS3")
  1632. server.messageon=1
  1633. server.msy=16
  1634. server.rscinterval=0
  1635.  
  1636. RSC_ClearMsg()
  1637. elseif (rsccommand == "NOD")
  1638. server.rscstate=2
  1639. server.rscinterval=0
  1640. elseif (rsccommand == "CLR")
  1641. RSC_ClearMsg()
  1642. elseif (rsccommand == "WAI")
  1643. server.rscstate=3
  1644. server.waittimer=tonumber(string.sub(script,server.scriptpos,server.scriptpos+3))
  1645. //print("<WAI "..server.waittimer)
  1646. server.scriptpos = $1 + 4
  1647. elseif (rsccommand == "INS") //Intro Sprite
  1648. server.introsprite=tonumber(string.sub(script,server.scriptpos,server.scriptpos+1))
  1649. server.scriptpos = $1 + 2
  1650. elseif (rsccommand == "INF") //Intro Frame
  1651. server.introframe=tonumber(string.sub(script,server.scriptpos,server.scriptpos+1))
  1652. server.scriptpos = $1 + 2
  1653. elseif (rsccommand == "INW") //Intro White / Flash because I already used F
  1654. server.introflash=9
  1655. elseif (rsccommand == "STG") //start game
  1656. server.messageon=false
  1657. server.rscstate=0
  1658. RSC_ClearMsg()
  1659. server.pdgstate=0
  1660. apsa_GotoLevel(1)
  1661. elseif (rsccommand == "GTS") //Goto Stage
  1662. apsa_GotoLevel(tonumber(string.sub(script,server.scriptpos,server.scriptpos)))
  1663. server.rscchangedlevel=true
  1664. server.scriptpos = $1 + 1
  1665. elseif (rsccommand == "SPD") //spawn dragon
  1666. local dragonid=CreateEnemy(3,1024,320,-1)
  1667. if (dragonid)
  1668. server.apsaenemies[dragonid].state=4
  1669. end
  1670. elseif (rsccommand == "PLJ") //player jump
  1671. for player in players.iterate
  1672. player.obj.yspeed = -275000
  1673. end
  1674. elseif (rsccommand == "SPL") //stop players
  1675. for player in players.iterate
  1676. player.obj.xspeed = $1 / 2
  1677. if (player.obj.xspeed < 98303)
  1678. player.obj.xspeed=0
  1679. end
  1680. end
  1681. elseif (rsccommand == "PFL") //player flip
  1682. for player in players.iterate
  1683. player.obj.leftright = -player.obj.leftright
  1684. end
  1685. elseif (rsccommand == "SEN") //see ending
  1686. server.pdgstate=2
  1687. elseif (rsccommand == "CAM") //switch camera mode
  1688. if (server.pdgcammode == 0)
  1689. server.pdgcammode=1
  1690. else
  1691. server.pdgcammode=0
  1692. end
  1693. elseif (rsccommand == "PSU") //player speed up
  1694. for player in players.iterate
  1695. player.obj.xspeed = $1 + 1*FRACUNIT
  1696. end
  1697. elseif (rsccommand == "BMU") //boss music
  1698. S_ChangeMusic("KDL3B")
  1699. elseif (rsccommand == "EXL") //exit level
  1700. G_ExitLevel()
  1701. elseif (rsccommand == "IMU") //intro music
  1702. S_ChangeMusic("MAPZZM",false)
  1703. elseif (rsccommand == "END")
  1704. RSC_ClearMsg()
  1705. server.messageon=false
  1706. server.rscstate=0
  1707. end
  1708. end
  1709.  
  1710. //check for new line
  1711. if (string.byte(string.sub(script,server.scriptpos,server.scriptpos)) == 13)
  1712. server.scriptpos = $1 + 1
  1713. end
  1714. //else {scriptpos+=1}
  1715. return ret
  1716. end
  1717.  
  1718. local function RSC_Message()
  1719. if (server.messagepos <= 128)
  1720. local char=string.sub(script,server.scriptpos,server.scriptpos)
  1721. //print(char)
  1722. if (string.byte(char) ~= 13)
  1723. server.messagecontent[server.messagepos].char=char
  1724. server.messagecontent[server.messagepos].col=server.textcolor
  1725. server.messagecontent[server.messagepos].shk=server.textshake
  1726. server.messagecontent[server.messagepos].wav=server.textwave
  1727. server.messagecontent[server.messagepos].ln=server.textline
  1728. server.messagelength = $1 + 1
  1729. else
  1730. server.textline = $1 + 1
  1731. //scriptpos-=1
  1732. end
  1733. //playsfx(global.sfx_msgbox)
  1734. end
  1735.  
  1736. server.messagepos = $1 + 1
  1737. server.scriptpos = $1 + 1
  1738. end
  1739.  
  1740. local function RSC_ExecuteEvent(event)
  1741. local scrpti=0
  1742. //print("FOOK")
  1743. while (scrpti <= string.len(script))
  1744. if (string.sub(script,scrpti,scrpti) == "*")
  1745. //print(tostring(tonumber(string.sub(script,scrpti+1,5)))) //4 = 3 according to string.sub so 5
  1746. //print(string.sub(script,scrpti+1,scrpti+1+3))
  1747. //print(tostring(event))
  1748. if (string.sub(script,scrpti+1,scrpti+1+3) == tostring(event))
  1749. server.scriptpos=scrpti+1+4
  1750. server.rscstate=1
  1751. RSC_Command()
  1752. //print("FUCKEROONI")
  1753. return
  1754. end
  1755. end
  1756. scrpti = $1 + 1
  1757. end
  1758. end
  1759.  
  1760. local function RSC_Step()
  1761.  
  1762. if (mapheaderinfo[gamemap].pdglevel == nil) //map header variable
  1763. return
  1764. end
  1765.  
  1766. if (server.rscinit == nil)
  1767. //Standard RScript Variables
  1768. server.rscstate=0 //0=doing nothing 1=executing (checking for commands and getting messages)
  1769. //2=nod 3=waiting
  1770. server.waittimer=-1
  1771. server.scriptpos=1
  1772. server.textcolor=31
  1773. server.textshake=false
  1774. server.textwave=false
  1775. server.textline=0
  1776. server.messagelength=0
  1777. server.messagepos=0
  1778. server.messageon=0 //0=off (DUH) 1=on (DUH X2) called with MSG 2=on (no box) called with MS2
  1779. 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)
  1780. server.facepic=0
  1781. server.nodtimer=0
  1782. server.messagecontent={}
  1783. local i=0
  1784. while (i <= 128)
  1785. server.messagecontent[i]={}
  1786. server.messagecontent[i].char=""
  1787. server.messagecontent[i].col=server.textcolor
  1788. server.messagecontent[i].shk=server.textshake
  1789. server.messagecontent[i].wav=server.textwave
  1790. server.messagecontent[i].ln=server.textline
  1791. i = $1 + 1
  1792. end
  1793. server.charname=0
  1794. server.sine=0
  1795. server.rscript_defcolor=31
  1796. server.rscinit=true
  1797. RSC_ExecuteEvent(5000)
  1798. end
  1799. //step
  1800. if (server.rscstate == 1)
  1801. local rsccmd=false
  1802. local char=string.sub(script,server.scriptpos,server.scriptpos)//string_char_at(script,scriptpos)
  1803. if (char == "<")
  1804. while (RSC_Command() and server.rscstate == 1)
  1805. rsccmd=true
  1806. end
  1807. end
  1808. //show_message("wat")
  1809. if (server.messageon and not rsccmd and server.rscstate == 1)
  1810. if (server.rscinterval == 0)
  1811. RSC_Message()
  1812. server.rscinterval=1
  1813. else
  1814. server.rscinterval = $1 - 1
  1815. if (server.rscinterval <= 0)
  1816. server.rscinterval = 0
  1817. end
  1818. end
  1819. if (button_check(server,vk.shoot))
  1820. //server.rscinterval=0
  1821. end
  1822. end
  1823. //end
  1824. elseif (server.rscstate == 2)//nod
  1825. if (button_check_pressed(server,vk.jump))
  1826. server.rscstate=1
  1827. server.rscinterval=0
  1828. end
  1829. server.nodtimer = $1 + 1 //+=0.03125 //in the real petscop this flashes every 16 frames
  1830. //so at 30 fps (the originals framerate) this would be 0.0625
  1831. //end
  1832. elseif (server.rscstate == 3)//waiting
  1833. if (server.waittimer >= 0)
  1834. server.waittimer = $1 - 1
  1835. if (server.waittimer < 0)
  1836. server.rscstate=1
  1837. server.rscinterval=0
  1838. end
  1839. end
  1840. end
  1841.  
  1842. server.sine = $1 + 12538 //+=0.11
  1843. //
  1844. if (server.rscchangedlevel)
  1845. server.messageon=false
  1846. server.rscstate=0
  1847. RSC_ClearMsg()
  1848. server.rscchangedlevel=false
  1849. return
  1850. end
  1851. end
  1852.  
  1853. addHook("ThinkFrame", RSC_Step)
  1854.  
  1855. //-----------------------------END RSCRIPT
  1856.  
  1857. local function apsa_ServerInit()
  1858. if (server.apsainit == nil)
  1859. server.apsainit=true
  1860. server.currentlevel=1
  1861. server.pdgstate=1 //0=ingame 1=not ingame (for intro)
  1862. server.movementmode=0 //0=players can move freely 1=they can't 2=they aren't even visible
  1863. server.introsprite=0
  1864. server.introframe=0
  1865. server.introflash=0
  1866. server.introtimer=0 //so you can exit it by pressing jump after a few seconds
  1867. server.lvlcomplete=false
  1868. server.rscchangedlevel=false
  1869. server.bossevent=false //planning is very important
  1870. server.pdgcammode=0 //0=normal 1=move to target with slowdown
  1871.  
  1872. apsa_InitObjectArrays()
  1873. RSC_ExecuteEvent(5000)
  1874. end
  1875. end
  1876.  
  1877. local function apsa_CheckLevelComplete() //checks if all players have completed the level
  1878. for player in players.iterate
  1879. if (not player.levelcomplete)
  1880. //print("FUCK ASS")
  1881. return false
  1882. end
  1883. end
  1884. //print("SHIT ASS")
  1885. return true
  1886. end
  1887.  
  1888.  
  1889. local function apsa_SpawnExplosions(x,y,spd) //GIMME DAT BOOM
  1890. spd = spd or 3
  1891. local i=0
  1892. local tempobj=0
  1893. while (i < 6)
  1894. tempobj=CreateEffect(0,x/FRACUNIT,y/FRACUNIT)
  1895. if (tempobj)
  1896. server.apsaeffects[tempobj].xspeed=cos(FixedAngle(60*i*FRACUNIT))*spd
  1897. server.apsaeffects[tempobj].yspeed=sin(FixedAngle(60*i*FRACUNIT))*spd
  1898. end
  1899. i = $1 + 1
  1900. end
  1901. end
  1902.  
  1903. //-----------------step
  1904. objfuncs.attackstep[0] = function(obj,id) //sauce
  1905. if (not obj.up)
  1906. obj.x = $1 + 674084 * obj.leftright
  1907. if (apsa_CollideTile(apsa_hitboxes[2],obj.x,obj.y))
  1908. local i=0
  1909. local amount=P_RandomRange(4,6)
  1910. local tempobj=0
  1911. while (i < amount)
  1912. //tempobj=instance_create(x+8*image_xscale,y,objSauceSplash);
  1913. if (tempobj)
  1914. server.apsaeffects[tempobj].xspeed=(P_RandomRange(1,3)*FRACUNIT)*obj.leftright
  1915. server.apsaeffects[tempobj].yspeed=P_RandomRange(-2,2)
  1916. end
  1917. i = $1 + 1;
  1918. end
  1919. DeleteAttack(id)
  1920. return
  1921. end
  1922. else
  1923. obj.y = $1 - 674084
  1924. if (apsa_CollideTile(apsa_hitboxes[2],obj.x,obj.y))
  1925. local i=0
  1926. local amount=P_RandomRange(4,6)
  1927. local tempobj=0
  1928. while (i < amount)
  1929. //tempobj=instance_create(x,y-8,objSauceSplash);
  1930. if (tempobj)
  1931. server.apsaeffects[tempobj].xspeed=P_RandomRange(-3,3)*FRACUNIT
  1932. server.apsaeffects[tempobj].yspeed=P_RandomRange(-2,2)*FRACUNIT
  1933. end
  1934. i = $1 + 1;
  1935. end
  1936. DeleteAttack(id)
  1937. return
  1938. end
  1939. end
  1940. //fall near the end of its timer
  1941. if (obj.timer <= 9 and not obj.up)
  1942. obj.y = $1 + FRACUNIT
  1943. end
  1944. obj.timer = $1 - 2
  1945. if (obj.timer <= 0)
  1946. DeleteAttack(id)
  1947. return
  1948. end
  1949. obj.frame = $1 + 11233
  1950. end
  1951. //----------enemies
  1952. objfuncs.enemystep[0] = function(obj,id) //circle
  1953. if (apsa_PointOnScreen(obj.x,obj.y,16))
  1954. apsa_TriangleEngineStep(obj)
  1955. //friction
  1956. //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}
  1957. //else {xspeed+=0.1 if xspeed > 0 xspeed=0}}
  1958. if (obj.onland and not obj.moving)
  1959. if (obj.xspeed > 0)
  1960. obj.xspeed = $1 - 11234
  1961. if (obj.xspeed < 0)
  1962. obj.xspeed=0
  1963. end
  1964. else
  1965. obj.xspeed = $1 + 11234
  1966. if (obj.xspeed > 0)
  1967. obj.xspeed=0
  1968. end
  1969. end
  1970. end
  1971.  
  1972. local nearplayer=apsa_NearPlayer(obj.x,obj.y,128)
  1973. if (nearplayer)
  1974. if (nearplayer.x > obj.x)
  1975. obj.xspeed = $1 + 5617
  1976. else
  1977. obj.xspeed = $1 - 5617
  1978. end
  1979. obj.xspeed=clamp(obj.xspeed,-168521,168521)
  1980. obj.leftright = sign(obj.xspeed)
  1981. if (apsa_CollideTile(apsa_hitboxes[1],obj.x+(24*FRACUNIT),obj.y) and obj.onland)
  1982. obj.yspeed = -275000
  1983. end //THEY CAN JUMP UP WALLS TO CHASE YOU?! this changes EVERYTHING!!!!
  1984. obj.frame=1*FRACUNIT
  1985. obj.moving = true
  1986. else
  1987. obj.moving=false
  1988. obj.frame=0
  1989. end
  1990. end
  1991.  
  1992. if (obj.hurttimer > 0)
  1993. obj.hurttimer = $1 - 1
  1994. end
  1995. local gothit=apsa_EnemyGetHit(apsa_hitboxes[1],obj.x,obj.y)
  1996. if (gothit and obj.hurttimer == 0)
  1997. //playsfx(global.hurt2sound)
  1998. apsa_PlaySFXNear(sfx_dmpain,obj.x,obj.y)
  1999. obj.hp = $1 - gothit
  2000. obj.hurttimer = 2
  2001. //print("got hit wtf "..id)
  2002. end
  2003. if (obj.hp <= 0)
  2004. CreateEffect(0,obj.x/FRACUNIT,obj.y/FRACUNIT)
  2005. apsa_PlaySFXNear(sfx_s3kb4,obj.x,obj.y)
  2006. DeleteEnemy(id)
  2007. return
  2008. /*instance_create(x,y,objExplosion)
  2009. instance_create(x,y-8,objSlice)
  2010. instance_destroy()*/
  2011. end
  2012. end
  2013. objfuncs.enemystep[1] = function(obj,id) //circlegunner
  2014. if (apsa_PointOnScreen(obj.x,obj.y,16))
  2015. apsa_TriangleEngineStep(obj)
  2016.  
  2017. local nearplayer=apsa_NearPlayer(obj.x,obj.y,192)
  2018. if (nearplayer)
  2019. obj.leftright = -sign(obj.x-nearplayer.x)
  2020. end
  2021.  
  2022. if (obj.state == 0)
  2023. if (nearplayer)
  2024. obj.state=1
  2025. obj.shoottimer=20
  2026. end
  2027. obj.frame=0
  2028. elseif (obj.state == 1)
  2029. obj.shoottimer = $1 - 1
  2030. if ((obj.shoottimer % 3) == 1)
  2031. CreateEnemy(2,(obj.x/FRACUNIT)+(20*obj.leftright),(obj.y/FRACUNIT)+4,obj.leftright)
  2032. apsa_PlaySFXNear(sfx_pdglsr,obj.x,obj.y,0)
  2033. end
  2034. if ((obj.shoottimer % 2) == 1)
  2035. obj.frame = $1 + FRACUNIT
  2036. if (obj.frame >= 2*FRACUNIT)
  2037. obj.frame=0
  2038. end
  2039. end
  2040. if (obj.shoottimer <= 0)
  2041. obj.state=2
  2042. obj.shoottimer=90
  2043. end
  2044. elseif (obj.state == 2)
  2045. obj.shoottimer = $1 - 1
  2046. if (obj.shoottimer <= 0)
  2047. obj.state=0
  2048. end
  2049. obj.frame=0
  2050. end
  2051.  
  2052. end
  2053.  
  2054. if (obj.hurttimer > 0)
  2055. obj.hurttimer = $1 - 1
  2056. end
  2057. local gothit=apsa_EnemyGetHit(apsa_hitboxes[1],obj.x,obj.y)
  2058. if (gothit and obj.hurttimer == 0)
  2059. //playsfx(global.hurt2sound)
  2060. apsa_PlaySFXNear(sfx_dmpain,obj.x,obj.y)
  2061. obj.hp = $1 - gothit
  2062. obj.hurttimer = 2
  2063. //print("got hit wtf "..id)
  2064. end
  2065. if (obj.hp <= 0)
  2066. CreateEffect(0,obj.x/FRACUNIT,obj.y/FRACUNIT)
  2067. apsa_PlaySFXNear(sfx_s3kb4,obj.x,obj.y)
  2068. DeleteEnemy(id)
  2069. return
  2070. /*instance_create(x,y,objExplosion)
  2071. instance_create(x,y-8,objSlice)
  2072. instance_destroy()*/
  2073. end
  2074. end
  2075. objfuncs.enemystep[2] = function(obj,id) //circlegunner bullet
  2076. obj.x = $1 + (898779*obj.leftright)
  2077. obj.timer = $1 + 1
  2078. if (obj.timer >= 17)
  2079. DeleteEnemy(id)
  2080. return
  2081. end
  2082. end
  2083. objfuncs.enemystep[3] = function(obj,id) //dragon
  2084. // run down hurt timer
  2085. if (obj.hurttimer > 0)
  2086. obj.hurttimer = $1 - 1
  2087. end
  2088. // Take damage
  2089. if (apsa_EnemyGetHit(apsa_hitboxes[4],obj.x,obj.y) and obj.hurttimer == 0 and obj.hp > 0)
  2090. obj.hp = $1 - 1
  2091. obj.hurttimer = 120
  2092. // give us time to change phase
  2093. if (obj.hp == 6)
  2094. obj.hurttimer = 240
  2095. obj.timer = 0
  2096. obj.state = 7
  2097. end
  2098. if (obj.hp < 6)
  2099. obj.hurttimer = 150
  2100. end
  2101. if (obj.hp == 0)
  2102. local i = 0
  2103. while (i < 10)
  2104. DeleteEnemy(obj.fireids[i])
  2105. i = $1 + 1
  2106. end
  2107. obj.state = 9 //ded
  2108. S_StopMusic()
  2109. S_StartSound(nil,sfx_s3kb4)
  2110. obj.canhurt = false
  2111. obj.timer = 0
  2112. end
  2113. end
  2114. // animate
  2115. obj.ft = $1 + 1
  2116. if (obj.ft == obj.framespeed and obj.state < 9)
  2117. obj.ft = 0
  2118. obj.frame = max(FRACUNIT,($1 + FRACUNIT) % 3*FRACUNIT)
  2119. end
  2120. // if we're in state 9, then shake and fall
  2121. if (obj.state == 9)
  2122. obj.timer = $1 + 32768
  2123. obj.timer = min(obj.timer,8*FRACUNIT)
  2124. obj.y = $1 + obj.timer
  2125. if (obj.y > 312*FRACUNIT)
  2126. obj.state = 10
  2127. obj.timer = 0
  2128. end
  2129. end
  2130. if (obj.state == 10)
  2131. obj.timer = $1 + 1
  2132. if (obj.timer > 10)
  2133. local spawnchance = P_RandomRange(min(120,obj.timer-10),120)
  2134. if (spawnchance >= 112 and obj.timer < 185)
  2135. apsa_SpawnExplosions((obj.x-25*FRACUNIT)+(P_RandomRange(0,50)*FRACUNIT),(obj.y-25*FRACUNIT)+(P_RandomRange(0,50)*FRACUNIT))
  2136. S_StartSound(nil,sfx_s3kb4)
  2137. end
  2138. end
  2139. if (obj.timer == 185)
  2140. //destroy all existing explosions
  2141. local i=1
  2142. while (i <= 45)
  2143. server.apsaeffects[i] = nil
  2144. i = $1 + 1
  2145. end
  2146. //ULTRA BOOM
  2147. i=0
  2148. while (i < 3)
  2149. apsa_SpawnExplosions((obj.x)+cos(FixedAngle(60*i*FRACUNIT))*8,(obj.y)+sin(FixedAngle(60*i*FRACUNIT))*8,10)
  2150. i = $1 + 1
  2151. end
  2152. S_StartSound(nil,sfx_bkpoof)
  2153. end
  2154. // finally, perish
  2155. if (obj.timer == 190)
  2156. local i=0
  2157. while (i < 3)
  2158. apsa_SpawnExplosions((obj.x)+cos(FixedAngle(((60*i)+22)*FRACUNIT))*8,(obj.y)+sin(FixedAngle(((60*i)+22)*i*FRACUNIT))*8,5)
  2159. i = $1 + 1
  2160. end
  2161. RSC_ExecuteEvent(5004)
  2162. DeleteEnemy(id)
  2163. return
  2164. end
  2165. end
  2166. // if we're in state 7, that means we're entering pinch mode. move to the middle of the screen
  2167. if (obj.state == 7)
  2168. obj.x = $1 + cos(R_PointToAngle2(obj.x,obj.y,536*FRACUNIT,130*FRACUNIT))*5
  2169. obj.y = $1 + sin(R_PointToAngle2(obj.x,obj.y,536*FRACUNIT,130*FRACUNIT))*5
  2170. if (536*FRACUNIT > obj.x)
  2171. obj.leftright = 1
  2172. else
  2173. obj.leftright = -1
  2174. end
  2175. if R_PointToDist2(obj.x,obj.y,536*FRACUNIT,130*FRACUNIT) <= 8*FRACUNIT
  2176. obj.state = 8
  2177. obj.fires = {}
  2178. local i = 0
  2179. while (i < 10)
  2180. obj.fireids[i] = CreateEnemy(4,obj.x/FRACUNIT,obj.y/FRACUNIT,0)
  2181. obj.fires[i] = server.apsaenemies[obj.fireids[i]]
  2182. // lol
  2183. obj.fires[i].timer = -2147483647
  2184. i = $1 + 1
  2185. end
  2186. S_StartSound(nil,sfx_s3k3e)
  2187. obj.radiusstate = 1
  2188. obj.targetradius = P_RandomRange(200,250)*FRACUNIT
  2189. obj.rotstate = 1
  2190. obj.targetrot = P_RandomRange(20,360)*FRACUNIT
  2191. end
  2192. end
  2193. // We are now in state 8, so we now must rotate the fire around us and move it around
  2194. if (obj.state == 8)
  2195. // move towards radius, outwards
  2196. if (obj.radiusstate == 1)
  2197. // not smoothing
  2198. if (obj.radiustime == 0)
  2199. obj.fireradius = $1 + 2*FRACUNIT
  2200. // achieved target radius, now switch
  2201. if (obj.fireradius >= obj.targetradius)
  2202. obj.targetradius = P_RandomRange(100,150)*FRACUNIT
  2203. obj.radiusstate = -1
  2204. obj.radiustime = 26
  2205. end
  2206. else
  2207. // smooth out the transition
  2208. obj.fireradius = $1 - ((2*FRACUNIT)-FixedMul(4*FRACUNIT,FixedDiv(26*FRACUNIT-obj.radiustime*FRACUNIT,26*FRACUNIT)))
  2209. obj.radiustime = $1 - 1
  2210. end
  2211. else
  2212. // not smoothing
  2213. if (obj.radiustime == 0)
  2214. obj.fireradius = $1 - 2*FRACUNIT
  2215. // achieved target radius, now switch
  2216. if (obj.fireradius <= obj.targetradius)
  2217. obj.targetradius = P_RandomRange(200,250)*FRACUNIT
  2218. obj.radiusstate = 1
  2219. obj.radiustime = 26
  2220. end
  2221. else
  2222. // smooth out the transition
  2223. obj.fireradius = $1 + ((2*FRACUNIT)-FixedMul(4*FRACUNIT,FixedDiv(26*FRACUNIT-obj.radiustime*FRACUNIT,26*FRACUNIT)))
  2224. obj.radiustime = $1 - 1
  2225. end
  2226. end
  2227.  
  2228. // move towards rot, outwards
  2229. if (obj.rotstate == 1)
  2230. // not smoothing
  2231. if (obj.rottime == 0)
  2232. obj.firerot = $1 + 1*FRACUNIT
  2233. // achieved target rot, now switch
  2234. if (obj.firerot >= obj.targetrot)
  2235. obj.targetrot = P_RandomRange(0,obj.firerot/FRACUNIT)*FRACUNIT
  2236. obj.rotstate = -1
  2237. obj.rottime = 26
  2238. end
  2239. else
  2240. // smooth out the transition
  2241. obj.firerot = $1 - ((1*FRACUNIT)-FixedMul(2*FRACUNIT,FixedDiv(26*FRACUNIT-obj.rottime*FRACUNIT,26*FRACUNIT)))
  2242. obj.rottime = $1 - 1
  2243. end
  2244. else
  2245. // not smoothing
  2246. if (obj.rottime == 0)
  2247. obj.firerot = $1 - 1*FRACUNIT
  2248. // achieved target rot, now switch
  2249. if (obj.firerot <= obj.targetrot)
  2250. obj.targetrot = P_RandomRange(obj.firerot/FRACUNIT,360)*FRACUNIT
  2251. obj.rotstate = 1
  2252. obj.rottime = 26
  2253. end
  2254. else
  2255. // smooth out the transition
  2256. obj.firerot = $1 + ((1*FRACUNIT)-FixedMul(2*FRACUNIT,FixedDiv(26*FRACUNIT-obj.rottime*FRACUNIT,26*FRACUNIT)))
  2257. obj.rottime = $1 - 1
  2258. end
  2259. end
  2260.  
  2261. // move fire into place
  2262. local baserot = obj.firerot
  2263. local i = 0
  2264. while (i < 10)
  2265. obj.fires[i].x = obj.x + FixedMul(obj.fireradius, cos(FixedAngle(baserot)))
  2266. obj.fires[i].y = obj.y + FixedMul(obj.fireradius, sin(FixedAngle(baserot)))
  2267. baserot = $1 + 36*FRACUNIT
  2268. i = $1 + 1
  2269. end
  2270. end
  2271. // if we're in state 0, decide an arbitrary position to fly to
  2272. if (obj.state == 0)
  2273. obj.targx = P_RandomRange(256,916)*FRACUNIT
  2274. obj.targy = P_RandomRange(128,164)*FRACUNIT
  2275. // face direction going
  2276. if (obj.targx > obj.x)
  2277. obj.leftright = 1
  2278. else
  2279. obj.leftright = -1
  2280. end
  2281. obj.state = 1
  2282. end
  2283. // if we're in state 1, then fly to our arbitrary position
  2284. if (obj.state == 1)
  2285. obj.x = $1 + cos(R_PointToAngle2(obj.x,obj.y,obj.targx,obj.targy))*5
  2286. obj.y = $1 + sin(R_PointToAngle2(obj.x,obj.y,obj.targx,obj.targy))*5
  2287. if R_PointToDist2(obj.x,obj.y,obj.targx,obj.targy) <= 8*FRACUNIT
  2288. obj.state = 2
  2289. end
  2290. end
  2291. // Once we're in position, let's shoot some fireballs
  2292. if (obj.state == 2)
  2293. obj.timer = $1 + 1
  2294. // If we've shot our fair share of fireballs, then let's do a different attack
  2295. if (obj.timer == 72)
  2296. obj.state = P_RandomRange(0,1)
  2297. if (obj.state == 0)
  2298. obj.state = 3
  2299. else
  2300. obj.state = 5
  2301. end
  2302. obj.timer = 0
  2303. end
  2304. if (obj.timer % 18 == 0 and obj.timer != 0)
  2305. S_StartSound(nil,sfx_s3k43)
  2306. // locate nearest player
  2307. obj.target = apsa_NearPlayer(obj.x,obj.y,20000)
  2308. // shit, no player, abort, abort!
  2309. if (obj.target == false)
  2310. return
  2311. end
  2312. if (obj.target.x > obj.x)
  2313. obj.leftright = 1
  2314. else
  2315. obj.leftright = -1
  2316. end
  2317. local fire = CreateEnemy(4,(obj.x + obj.leftright*45*FRACUNIT)/FRACUNIT,obj.y/FRACUNIT,0)
  2318.  
  2319. server.apsaenemies[fire].xsp = 6*cos(R_PointToAngle2(server.apsaenemies[fire].x,server.apsaenemies[fire].y,obj.target.x,obj.target.y))
  2320. server.apsaenemies[fire].ysp = 6*sin(R_PointToAngle2(server.apsaenemies[fire].x,server.apsaenemies[fire].y,obj.target.x,obj.target.y))
  2321. end
  2322. end
  2323. // swoop off screen
  2324. if (obj.state == 3)
  2325. if (obj.x < 1500*FRACUNIT)
  2326. obj.x = $1 + 10*FRACUNIT
  2327. obj.leftright = 1
  2328. else
  2329. obj.state = 4
  2330. obj.y = 312*FRACUNIT
  2331. end
  2332. end
  2333. // swoop on screen
  2334. if (obj.state == 4)
  2335. if (obj.x > -100*FRACUNIT)
  2336. obj.x = $1 - 10*FRACUNIT
  2337. obj.leftright = -1
  2338. else
  2339. obj.state = 0
  2340. obj.y = 256*FRACUNIT
  2341. end
  2342. end
  2343. // prepare to smash into the ground by doing a little shake to let players know to get the heck outta dodge
  2344. if (obj.state == 5)
  2345. obj.timer = $1 + 1
  2346. if obj.timer > 15 and obj.timer < 35
  2347. local t = obj.timer % 2
  2348. if t == 0
  2349. obj.y = $1 + 4*FRACUNIT
  2350. else
  2351. obj.y = $1 - 4*FRACUNIT
  2352. end
  2353. end
  2354. if (obj.timer == 60)
  2355. obj.timer = 0
  2356. obj.state = 6
  2357. end
  2358. end
  2359. // actually smash into the ground
  2360. if (obj.state == 6)
  2361. obj.timer = $1 + 1
  2362. if (obj.timer < 6)
  2363. obj.y = $1 - 6*FRACUNIT
  2364. else
  2365. obj.y = $1 + 14*FRACUNIT
  2366. if (obj.y >= 312*FRACUNIT)
  2367. obj.y = 312*FRACUNIT
  2368. // we have collided into the ground
  2369. if (obj.timer < 1000)
  2370. S_StartSound(nil,sfx_s3k5f)
  2371. obj.timer = 1000
  2372. local e = CreateEnemy(2,(obj.x/FRACUNIT)-50,obj.y/FRACUNIT,-1)
  2373. server.apsaenemies[e].timer = -20
  2374. e = CreateEnemy(2,(obj.x/FRACUNIT)+50,obj.y/FRACUNIT,1)
  2375. server.apsaenemies[e].timer = -20
  2376. end
  2377. end
  2378. end
  2379. if (obj.timer == 1050)
  2380. obj.state = 0
  2381. obj.timer = 0
  2382. end
  2383. end
  2384. end
  2385. objfuncs.enemystep[4] = function(obj,id) //dragon bullet
  2386. obj.frame = $1 + FRACUNIT
  2387. obj.timer = $1 + 1
  2388. obj.x = $1 + obj.xsp
  2389. obj.y = $1 + obj.ysp
  2390. obj.leftright = 0
  2391. if (obj.timer == 70)
  2392. DeleteEnemy(id)
  2393. end
  2394. end
  2395. //----------effects
  2396. objfuncs.effectstep[0] = function(obj,id) //splod
  2397. obj.x = $1 + obj.xspeed
  2398. obj.y = $1 + obj.yspeed
  2399. obj.frame = $1 + 24000
  2400. if (obj.frame >= 4*FRACUNIT)
  2401. DeleteEffect(id)
  2402. return
  2403. end
  2404. end
  2405.  
  2406. local function ObjectsStep() //execute objects
  2407. local i=1
  2408. while (i <= 80)
  2409. if (server.apsaattacks[i] ~= nil)
  2410. objfuncs.attackstep[server.apsaattacks[i].otype](server.apsaattacks[i],i)
  2411. end
  2412. i = $1 + 1
  2413. end
  2414. i=1
  2415. while (i <= 45)
  2416. if (server.apsaenemies[i] ~= nil)
  2417. objfuncs.enemystep[server.apsaenemies[i].otype](server.apsaenemies[i],i)
  2418. end
  2419. i = $1 + 1
  2420. end
  2421. i=1
  2422. while (i <= 45)
  2423. if (server.apsaeffects[i] ~= nil)
  2424. objfuncs.effectstep[server.apsaeffects[i].otype](server.apsaeffects[i],i)
  2425. end
  2426. i = $1 + 1
  2427. end
  2428. end
  2429.  
  2430. //player
  2431.  
  2432. local function apsa_PlayerAnimation(player)
  2433. if (player.obj.onland)
  2434. if (player.obj.shoottimer <= 3)
  2435. player.obj.spriteindex=1
  2436. if (player.obj.xspeed ~= 0)
  2437. player.obj.spriteindex=2
  2438. player.obj.framespeed=abs(player.obj.xspeed)/16
  2439. end
  2440. end
  2441. elseif (player.obj.shoottimer <= 3)
  2442. player.obj.spriteindex=3
  2443. player.obj.framespeed=0
  2444. if (player.obj.yspeed < 0)
  2445. player.obj.frame=0
  2446. else
  2447. player.obj.frame=FRACUNIT
  2448. end
  2449. end
  2450. end
  2451.  
  2452. local function apsa_PlayerMovement(player)
  2453. if (button_check(player,vk.right) and not button_check(player,vk.left))
  2454. player.obj.xspeed = $1 + 8224
  2455. if (player.obj.xspeed < 0)
  2456. player.obj.xspeed = $1 + 11231 //turn around fast
  2457. end
  2458. if (not button_check(player,vk.shoot))
  2459. player.obj.leftright=1
  2460. end
  2461. end
  2462. if (button_check(player,vk.left) and not button_check(player,vk.right))
  2463. player.obj.xspeed = $1 - 8224
  2464. if (player.obj.xspeed > 0)
  2465. player.obj.xspeed = $1 - 11231 //turn around fast
  2466. end
  2467. if (not button_check(player,vk.shoot))
  2468. player.obj.leftright=-1
  2469. end
  2470. end
  2471. if (player.obj.onland)
  2472. //friction
  2473. if (not button_check(player,vk.right) and not button_check(player,vk.left))
  2474. if (player.obj.xspeed > 0)
  2475. player.obj.xspeed=clamp(player.obj.xspeed-11231,0,255*FRACUNIT)
  2476. else
  2477. player.obj.xspeed=clamp(player.obj.xspeed+11231,-255*FRACUNIT,0)
  2478. end
  2479. end
  2480. //jumping
  2481. //449315
  2482. if (button_check_pressed(player,vk.jump))
  2483. //print("jump")
  2484. apsa_PlaySFXNear(sfx_jump,player.obj.x,player.obj.y)
  2485. player.obj.yspeed = -275000
  2486. player.obj.onland = false
  2487. end
  2488. end
  2489. player.obj.xspeed=clamp(player.obj.xspeed,-269584,269584)
  2490. end
  2491.  
  2492. local function apsa_PlayerAbilities(player)
  2493. local bulletcount=0
  2494. //with (objSauce) {bulletcount+=1}
  2495.  
  2496. if (not button_check(player,vk.shoot))
  2497. if (button_check(player,vk.up))
  2498. player.obj.shootup=true
  2499. else
  2500. player.obj.shootup=false
  2501. end
  2502. end
  2503. //actually shoot
  2504. if (bulletcount <= 2) /*shoottimer=0*/
  2505. if (button_check_pressed(player,vk.shoot))
  2506. //instance_create(x+11*leftright-(10*shootup)*leftright,y+7,objSauce)
  2507. local tempobj=0
  2508. apsa_PlaySFXNear(sfx_gloop,player.obj.x,player.obj.y)
  2509. tempobj=CreateAttack(0,player.obj.x/FRACUNIT,player.obj.y/FRACUNIT,player.obj.leftright)
  2510. if (tempobj)
  2511. server.apsaattacks[tempobj].up=player.obj.shootup
  2512. end
  2513. player.obj.shoottimer=15
  2514.  
  2515. player.obj.spriteindex=6
  2516. if (player.obj.shootup)
  2517. player.obj.spriteindex=7
  2518. end
  2519. player.obj.framespeed=16384
  2520. end
  2521. end
  2522. //shoottimer needs to go down so you can keep shooting after the first shot
  2523. if (player.obj.shoottimer > 0)
  2524. player.obj.shoottimer = clamp(player.obj.shoottimer - 1,0,16)
  2525. end
  2526. end
  2527.  
  2528. local function apsa_PlayerFuckingDie(player)
  2529. player.dead=true
  2530. player.deathtimer=0
  2531. apsa_SpawnExplosions(player.obj.x,player.obj.y) //GO OUT IN A BLAZE OF GLORYYY
  2532. end
  2533.  
  2534. local function apsa_PlayerStep(player)
  2535. 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)
  2536. if (not player.dead)
  2537. apsa_TriangleEngineStep(player.obj)
  2538. if (server.movementmode == 0 and not player.levelcomplete)
  2539. apsa_PlayerMovement(player)
  2540. apsa_PlayerAbilities(player)
  2541.  
  2542. local spring=apsa_PlayerHitSpring(player.obj.x,player.obj.y)
  2543. if (spring)
  2544. if (not S_IdPlaying(sfx_spring))
  2545. apsa_PlaySFXNear(sfx_spring,player.obj.x,player.obj.y)
  2546. end
  2547. if (server.apsasprings[spring].otype == 0)
  2548. player.obj.yspeed = -391000
  2549. else //diagonal
  2550. player.obj.yspeed = -391000
  2551. player.obj.xspeed=(269854*server.apsasprings[spring].leftright)
  2552. end
  2553. end
  2554. end
  2555.  
  2556. if (server.movementmode ~= 0)
  2557. local spring=apsa_PlayerHitSpring(player.obj.x,player.obj.y)
  2558. if (spring)
  2559. if (not S_IdPlaying(sfx_spring))
  2560. apsa_PlaySFXNear(sfx_spring,player.obj.x,player.obj.y)
  2561. end
  2562. if (server.apsasprings[spring].otype == 0)
  2563. player.obj.yspeed = -391000
  2564. else //diagonal
  2565. player.obj.yspeed = -391000
  2566. player.obj.xspeed=(269854*server.apsasprings[spring].leftright)
  2567. end
  2568. end
  2569. end
  2570.  
  2571. player.obj.x=clamp(player.obj.x,0,(levels[server.currentlevel].width*16)*FRACUNIT)
  2572.  
  2573. //complete level
  2574. if (levels[server.currentlevel].levelend ~= nil and not player.levelcomplete)
  2575. 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))
  2576. player.levelcomplete=true
  2577. player.obj.xspeed=0
  2578. end
  2579. end
  2580.  
  2581. if (not player.levelcomplete)
  2582. if (player.tempinvin ~= 0)
  2583. player.tempinvin = $1 - 1
  2584. end
  2585.  
  2586. if (player.tempinvin == 0 and apsa_PlayerGetHit(player.obj.x,player.obj.y))
  2587. player.hp = $1 - 1
  2588. player.tempinvin=35
  2589. player.obj.xspeed = 0
  2590. end
  2591.  
  2592. if (player.hp <= 0 or player.obj.y >= ((levels[server.currentlevel].height*16)*FRACUNIT))
  2593. apsa_PlaySFXNear(sfx_s3k35,player.obj.x,player.obj.y)
  2594. apsa_PlayerFuckingDie(player)
  2595. end
  2596. end
  2597.  
  2598. apsa_PlayerAnimation(player)
  2599. player.obj.frame = $1 + player.obj.framespeed
  2600.  
  2601. //camera
  2602. //player.viewpos.x = clamp((player.obj.x/FRACUNIT)-320,0,clamp((levels[server.currentlevel].width*16)-640,640,99999))
  2603. //player.viewpos.y = clamp((player.obj.y/FRACUNIT)-200,0,clamp((levels[server.currentlevel].height*16)-200,200,99999))
  2604. /*player.viewpos.x = (player.obj.x/FRACUNIT)-320
  2605. player.viewpos.x = clamp(player.viewpos.x,0,clamp((levels[server.currentlevel].width*16)-656,0,99999))
  2606. player.viewpos.y = (player.obj.y/FRACUNIT)-200
  2607. player.viewpos.y = clamp(player.viewpos.y,0,clamp((levels[server.currentlevel].height*16)-416,0,99999))*/
  2608. if (server.pdgcammode == 0)
  2609. player.campos.x=player.obj.x
  2610. player.campos.y=player.obj.y
  2611. else
  2612. player.campos.x = $1 + ((6080*FRACUNIT)-player.campos.x)/15
  2613. player.campos.y = $1 + ((128*FRACUNIT)-player.campos.y)/15
  2614. end
  2615.  
  2616. player.viewpos.x = (player.campos.x/FRACUNIT)-320
  2617. player.viewpos.x = clamp(player.viewpos.x,0,clamp((levels[server.currentlevel].width*16)-656,0,99999))
  2618. player.viewpos.y = (player.campos.y/FRACUNIT)-200
  2619. player.viewpos.y = clamp(player.viewpos.y,0,clamp((levels[server.currentlevel].height*16)-416,0,99999))
  2620. else //you're dead kiddo
  2621. player.deathtimer = $1 + 1
  2622. if (player.deathtimer >= 70) //but now you're not
  2623. player.obj.x=levels[server.currentlevel].startx*FRACUNIT
  2624. player.obj.y=levels[server.currentlevel].starty*FRACUNIT
  2625.  
  2626. if (server.currentlevel == 3) //don't respawn over a death pit on the boss
  2627. player.obj.x=256*FRACUNIT
  2628. end
  2629.  
  2630. player.obj.xspeed=0
  2631. player.obj.yspeed=0
  2632. player.obj.shoottimer=0
  2633. player.obj.shootup=0
  2634. player.obj.spriteindex=1
  2635. player.obj.frame=0
  2636. player.obj.framespeed=0
  2637. player.deathtimer=0
  2638. player.dead=false
  2639. player.tempinvin=0
  2640. player.hp=4
  2641. end
  2642. end
  2643. end
  2644. end
  2645.  
  2646. local function apsa_PlayerSpawn(player)
  2647. player.obj=apsa_CreateTriangleEngineObject()
  2648. player.obj.x=levels[server.currentlevel].startx*FRACUNIT
  2649. player.obj.y=levels[server.currentlevel].starty*FRACUNIT
  2650.  
  2651. player.obj.shoottimer=0
  2652. player.obj.shootup=0
  2653. player.obj.spriteindex=1
  2654. player.obj.frame=0
  2655. player.obj.framespeed=0
  2656. end
  2657.  
  2658. local function apsa_PlayerInit(player)
  2659. if (player.apsainitp == nil)
  2660. player.apsainitp=true
  2661. player.viewpos={}
  2662. player.viewpos.x=0
  2663. player.viewpos.y=0
  2664. player.campos={} //fracunits (turned into viewpos which is pixels)
  2665. player.campos.x=0
  2666. player.campos.y=0
  2667. player.dead=false
  2668. player.deathtimer=0
  2669. player.hp=4
  2670. player.tempinvin=0
  2671. player.levelcomplete=false
  2672. apsa_PlayerSpawn(player)
  2673.  
  2674. player.inputs = {0,0,0,0,0,0,0,0}
  2675. player.inputsprev = {0,0,0,0,0,0,0,0}
  2676. player.pflags = $1 | PF_FORCESTRAFE
  2677. player.normalspeed=0
  2678. player.jumpfactor=0
  2679. player.charability=CA_NONE
  2680. player.charability2=CA_NONE
  2681. //print("APSA Init")
  2682. end
  2683. if (player.obj == nil)
  2684. apsa_PlayerSpawn(player)
  2685. end
  2686. //force player flags every frame
  2687. player.pflags = $1 | PF_FORCESTRAFE
  2688. player.normalspeed=0
  2689. player.jumpfactor=0
  2690. player.charability=CA_NONE
  2691. player.charability2=CA_NONE
  2692. end
  2693.  
  2694. local function apsa_Main()
  2695. if (mapheaderinfo[gamemap].pdglevel == nil) //map header variable
  2696. return
  2697. end
  2698. apsa_ServerInit()
  2699. //server code
  2700. if (server.introflash > 0)
  2701. server.introflash = $1 - 1
  2702. end
  2703. //exit intro by pressing button
  2704. if (server.pdgstate == 1)
  2705. server.introtimer = $1 + 1
  2706. if (server.introtimer >= 2) //so it doesn't error while using button_check
  2707. //if in single player/splitscreen you can skip the intro right away otherwise only after 10 seconds
  2708. 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
  2709. //start game
  2710. server.messageon=false
  2711. server.rscstate=0
  2712. RSC_ClearMsg()
  2713. server.pdgstate=0
  2714. apsa_GotoLevel(1)
  2715. end
  2716. end
  2717. end
  2718. if (server.bossevent)
  2719. server.bossevent=false
  2720. RSC_ExecuteEvent(5003)
  2721. for player in players.iterate
  2722. player.obj.xspeed=4*FRACUNIT
  2723. end
  2724. end
  2725. //game
  2726. for player in players.iterate
  2727. apsa_PlayerInit(player)
  2728. apsa_PlayerInput(player)
  2729. apsa_PlayerStep(player)
  2730. end
  2731. if (server.pdgstate == 0)
  2732. ObjectsStep()
  2733.  
  2734. if (not server.lvlcomplete)
  2735. if (apsa_CheckLevelComplete())
  2736. server.lvlcomplete=true
  2737. RSC_ExecuteEvent(levels[server.currentlevel].levelend.event)
  2738. end
  2739. end
  2740. end
  2741. //print(server.lvlcomplete)
  2742. end
  2743.  
  2744. hud.add(TestDraw,"game")
  2745. addHook("ThinkFrame", apsa_Main)
  2746.  
  2747.  
  2748. local function apsa_Reload()
  2749. if (server.apsainit and mapheaderinfo[gamemap].pdglevel ~= nil)
  2750. server.currentlevel=1
  2751. server.pdgstate=1 //0=ingame 1=not ingame (for intro)
  2752. server.movementmode=0 //0=players can move freely 1=they can't 2=they aren't even visible
  2753. server.introsprite=0
  2754. server.introframe=0
  2755. server.introflash=0
  2756. server.introtimer=0 //so you can exit it by pressing jump after a few seconds
  2757. server.lvlcomplete=false
  2758. server.rscchangedlevel=false
  2759. server.bossevent=false //planning is very important
  2760. server.pdgcammode=0 //0=normal 1=move to target with slowdown
  2761.  
  2762. apsa_InitObjectArrays()
  2763. RSC_ExecuteEvent(5000)
  2764. end
  2765. end
  2766. addHook("MapLoad", apsa_Reload)
Add Comment
Please, Sign In to add comment