Advertisement
Venrob

MM2D Throwable Pots

Jul 27th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. //start Pots
  2. DEFINE POT_STEP_MOVING = 75;
  3. DEFINE POT_STEP_STILL = 150;
  4. ffc script Pot
  5. {
  6. void run(ItemID drop, int underCombo)
  7. {
  8. if(drop<0) drop = getDropsetDrop(DROPSET_GRASS);
  9. unless(underCombo) underCombo = COMBO_INVIS;
  10. combodata cd = Game->LoadComboData(this->Data);
  11. bool dodrop = drop>-1;
  12. while(true)
  13. {
  14. for(int q = Screen->NumLWeapons(); q>=MIN_LWEAPON; --q)
  15. {
  16. lweapon weap = Screen->LoadLWeapon(q);
  17. switch(weap->ID)
  18. {
  19. case LW_SWORD:
  20. case LW_BOMBBLAST:
  21. case LW_BRANG:
  22. if(Collision(this,weap))
  23. {
  24. Audio->PlaySound(SFX_POT_SHATTER);
  25. item shards = CreateItemAt(IT_DUMMY,this->X,this->Y);
  26. shards->Pickup = IP_DUMMY | IP_TIMEOUT;
  27. shards->OriginalTile = cd->Tile + 20;
  28. shards->Tile = cd->Tile + 20;
  29. shards->NumFrames = cd->Frames;
  30. shards->CSet = cd->CSet;
  31. if(dodrop)
  32. {
  33. item it = CreateItemAt(drop, this->X, this->Y);
  34. it->Pickup = IP_TIMEOUT;
  35. }
  36. this->Data = underCombo;
  37. Quit();
  38. }
  39. }
  40. }
  41. if(AgainstFFCBase(this) && HoldingObject == HOLD_NONE)
  42. {
  43. setGlobalBool(GVAR_AGAINST_PICKUP,GV_MISC_BOOL,true);
  44. if(Input->Press[CB_R])
  45. break;
  46. }
  47. ffcSolid(this);
  48. Waitframe();
  49. }
  50. //Picked up
  51. Audio->PlaySound(SFX_PICKUP_OBJ);
  52. HoldingObject = HOLD_POT;
  53. item it = CreateItemAt(IT_DUMMY,Hero->X,Hero->Y-8);
  54. it->Pickup = IP_DUMMY;
  55. it->OriginalTile = cd->Tile;
  56. it->Tile = cd->Tile;
  57. it->NumFrames = cd->Frames;
  58. it->CSet = cd->CSet;
  59. it->Script = Game->GetItemSpriteScript("flyingPot");
  60. it->InitD[0] = drop;
  61. this->Data = underCombo;
  62. TotalNoAction();
  63. }
  64. }
  65.  
  66. itemsprite script flyingPot
  67. {
  68. void run(ItemID dropItem)
  69. {
  70. bool dodrop = dropItem>-1;
  71. until(Input->Press[CB_A]||Input->Press[CB_B]||Input->Press[CB_EX1]||Input->Press[CB_EX2]||Input->Press[CB_R]||Input->Press[CB_L])
  72. {
  73. this->Misc[ITEMMISC_LAYERDMAP] = Game->GetCurDMap() + 1;
  74. this->X = Hero->X;
  75. this->Y = Hero->Y - 8;
  76. Waitframe();
  77. }
  78. TotalNoAction();
  79. mapdata map = getLayerMapdata(getRelativeHeight(this));
  80. this->X = Hero->X;
  81. this->Y = Hero->Y;
  82. HoldingObject = HOLD_NONE;
  83. int dir = HeroDir8,
  84. pix = Hero->Action==LA_WALKING ? (POT_STEP_MOVING/100) + (1.5+LinkMovement_GetLinkSpeedBoost()) : POT_STEP_STILL/100;
  85. for(int q = 0; q < 60; ++q)
  86. {
  87. while(true)
  88. {
  89. int centerCombo = ComboAt(this->X + InFrontCenteredX(dir,pix),this->Y + InFrontCenteredY(dir,pix));
  90. if(map->ComboI[centerCombo] == CI_RAMP)
  91. {
  92. if(map->ComboF[centerCombo] == CF_RAMP_UP)
  93. {
  94. ++this->Misc[ITEMMISC_LAYERDMAP];
  95. map = getLayerMapdata(getRelativeHeight(this));
  96. continue;
  97. }
  98. }
  99. break;
  100. }
  101. unless(MM2D::CanWalkM(this, map, dir, Ceiling(pix),true))
  102. break;
  103. if(offscreen(this->X + (dirX(dir) * pix), this->Y + (dirY(dir) * pix)))
  104. break;
  105. this->X += dirX(dir) * pix;
  106. this->Y += dirY(dir) * pix;
  107. Waitframe();
  108. }
  109. Audio->PlaySound(SFX_POT_SHATTER);
  110. this->OriginalTile += 20; //shatter
  111. //Fall down pits
  112. for(int x = this->X+3; x<this->X+13; x+=9)
  113. {
  114. for(int y = this->Y+9; y<this->Y+13; y+=3)
  115. {
  116. if(map->ComboT[ComboAt(x,y)] == CT_PITFALL)
  117. {
  118. --this->Misc[ITEMMISC_LAYERDMAP];
  119. //Reset loop to re-check next layer:
  120. x = this->X+3;
  121. y = this->Y+9;
  122. map = getLayerMapdata(getRelativeHeight(this));
  123. }
  124. }
  125. }
  126. if(dodrop)
  127. {
  128. item it = CreateItemAt(dropItem,this->X,this->Y);
  129. it->Misc[ITEMMISC_LAYERDMAP] = this->Misc[ITEMMISC_LAYERDMAP];
  130. }
  131. this->Pickup |= IP_TIMEOUT;
  132. Quit();
  133. }
  134. }
  135. //end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement