Advertisement
ZoriaRPG

Ywkls Ladder 2

Dec 22nd, 2017
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 KB | None | 0 0
  1. const int LADDER_TILE = 369;
  2. int GRAM[512];
  3. const int DRAW_LADDER = 511;
  4. void DrawLadder(bool v){ GRAM[DRAW_LADDER] = Cond(v, 1, 0);}
  5. bool DrawLadder(){ return GRAM[DRAW_LADDER];}
  6.  
  7. bool isLadder(int x, int y){
  8. int loc = ComboAt(x,y);
  9. if (Screen->ComboT[loc]==CT_LADDERHOOKSHOT) return true;
  10. if ( Screen->ComboT[loc]==CT_LADDERONLY) return true;
  11. return false;
  12. }
  13.  
  14. bool ScriptedLadder()
  15. {
  16.  
  17. if (!(Link->Item[I_LADDER1])) return false;
  18. if ( Link->InputRight )
  19. {
  20. if ( Link->InputUp )
  21. {
  22. if ( Link->Dir == DIR_UP )
  23. {
  24. //we only need to handle this special case.
  25. //If Link is not facing up or down, then this can be skipped
  26. //and the right-facing else block will run.
  27. if( (isLadder(Link->X+8,Link->Y-1)) { Link->Y-=2; return true; }
  28. if( isLadder(Link->X,Link->Y-1)) { Link->Y-=2; return true; }
  29. if ( isLadder(Link->X+15,Link->Y-1)) { Link->Y-=2; return true; }
  30. if ( isLadder(Link->X+8,Link->Y+15)) { Link->Y-=2; return true; }
  31. if ( isLadder(Link->X,Link->Y+15)) { Link->Y-=2; return true; }
  32. if ( isLadder(Link->X+15,Link->Y+15)) { Link->Y-=2; return true; }
  33. }
  34.  
  35. }
  36. else if ( Link->InputDown )
  37. {
  38. //diagonal down-right
  39. if ( Link->Dir == DIR_DOWN )
  40. {
  41. if((isLadder(Link->X+8,Link->Y+17)) { Link->Y+=2; return true;}
  42. if ( isLadder(Link->X,Link->Y+17)) { Link->Y+=2; return true;}
  43. if (isLadder(Link->X+15,Link->Y+17)) { Link->Y+=2; return true;}
  44. if ( isLadder(Link->X+8,Link->Y)) { Link->Y+=2; return true;}
  45. if ( isLadder(Link->X,Link->Y)) { Link->Y+=2; return true;}
  46. if ( isLadder(Link->X+15,Link->Y)) { Link->Y+=2; return true;}
  47. }
  48. }
  49. }
  50. else
  51. {
  52. if((isLadder(Link->X+17,Link->Y+8) ) { Link->X+=2; return true; }
  53. if ( isLadder(Link->X+17, Link->Y) ) { Link->X+=2; return true; }
  54. if ( isLadder(Link->X+17, Link->Y+15) ) { Link->X+=2; return true; }
  55. if ( isLadder(Link->X+1,Link->Y+8) ) { Link->X+=2; return true; }
  56. if ( isLadder(Link->X+1, Link->Y) ) { Link->X+=2; return true; }
  57. if (IsLadder(Link->X+1, Link->Y+15)) { Link->X+=2; return true; }
  58.  
  59. }
  60.  
  61. if ( Link->InputLeft )
  62. {
  63. if ( Link->InputUp )
  64. {
  65. if ( Link->Dir == DIR_UP )
  66. {
  67. //we only need to handle this special case.
  68. if( (isLadder(Link->X+8,Link->Y-1)) { Link->Y-=2; return true; }
  69. if( isLadder(Link->X,Link->Y-1)) { Link->Y-=2; return true; }
  70. if ( isLadder(Link->X+15,Link->Y-1)) { Link->Y-=2; return true; }
  71. if ( isLadder(Link->X+8,Link->Y+15)) { Link->Y-=2; return true; }
  72. if ( isLadder(Link->X,Link->Y+15)) { Link->Y-=2; return true; }
  73. if ( isLadder(Link->X+15,Link->Y+15)) { Link->Y-=2; return true; }
  74. }
  75.  
  76. }
  77. else if ( Link->InputDown )
  78. {
  79. //diagonal down-right
  80. if ( Link->Dir == DIR_DOWN )
  81. {
  82. if((isLadder(Link->X+8,Link->Y+17)) { Link->Y+=2; return true;}
  83. if ( isLadder(Link->X,Link->Y+17)) { Link->Y+=2; return true;}
  84. if (isLadder(Link->X+15,Link->Y+17)) { Link->Y+=2; return true;}
  85. if ( isLadder(Link->X+8,Link->Y)) { Link->Y+=2; return true;}
  86. if ( isLadder(Link->X,Link->Y)) { Link->Y+=2; return true;}
  87. if ( isLadder(Link->X+15,Link->Y)) { Link->Y+=2; return true;}
  88. }
  89. }
  90. }
  91. else
  92. {
  93. if((isLadder(Link->X-1,Link->Y+8) ) { Link->X-=2; return true;}
  94.  
  95. if (isLadder(Link->X-1,Link->Y)) { Link->X-=2; return true;}
  96.  
  97. if (isLadder(Link->X-1,Link->Y+15)) { Link->X-=2; return true;}
  98.  
  99. if (isLadder(Link->X+15,Link->Y+8)) { Link->X-=2; return true;}
  100.  
  101. if (IsLadder(Link->X+15,Link->Y)) { Link->X-=2; return true;}
  102. if (isLadder(Link->X+15,Link->Y+15)) { Link->X-=2; return true;}
  103. }
  104. //only non-diagonals are not covered
  105.  
  106.  
  107. if ( Link->InputUp )
  108. {
  109. if( (isLadder(Link->X+8,Link->Y-1)) { Link->Y-=2; return true; }
  110. if( isLadder(Link->X,Link->Y-1)) { Link->Y-=2; return true; }
  111. if ( isLadder(Link->X+15,Link->Y-1)) { Link->Y-=2; return true; }
  112. if ( isLadder(Link->X+8,Link->Y+15)) { Link->Y-=2; return true; }
  113. if ( isLadder(Link->X,Link->Y+15)) { Link->Y-=2; return true; }
  114. if ( isLadder(Link->X+15,Link->Y+15)) { Link->Y-=2; return true; }
  115.  
  116. }
  117.  
  118. if ( Link->InputDown)
  119. {
  120.  
  121. if((isLadder(Link->X+8,Link->Y+17)) { Link->Y+=2; return true;}
  122. if ( isLadder(Link->X,Link->Y+17)) { Link->Y+=2; return true;}
  123. if (isLadder(Link->X+15,Link->Y+17)) { Link->Y+=2; return true;}
  124. if ( isLadder(Link->X+8,Link->Y)) { Link->Y+=2; return true;}
  125. if ( isLadder(Link->X,Link->Y)) { Link->Y+=2; return true;}
  126. if ( isLadder(Link->X+15,Link->Y)) { Link->Y+=2; return true;}
  127. }
  128. return false;
  129. }
  130.  
  131. void DoLadder()
  132. {
  133. DrawLadder( ScriptedLadder() );
  134.  
  135. if(DrawLadder() )
  136. {
  137. Screen->FastTile(0,Link->X,Link->Y,LADDER_TILE,0,128);
  138. }
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement