Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //start Pots
- DEFINE POT_STEP_MOVING = 75;
- DEFINE POT_STEP_STILL = 150;
- ffc script Pot
- {
- void run(ItemID drop, int underCombo)
- {
- if(drop<0) drop = getDropsetDrop(DROPSET_GRASS);
- unless(underCombo) underCombo = COMBO_INVIS;
- combodata cd = Game->LoadComboData(this->Data);
- bool dodrop = drop>-1;
- while(true)
- {
- for(int q = Screen->NumLWeapons(); q>=MIN_LWEAPON; --q)
- {
- lweapon weap = Screen->LoadLWeapon(q);
- switch(weap->ID)
- {
- case LW_SWORD:
- case LW_BOMBBLAST:
- case LW_BRANG:
- if(Collision(this,weap))
- {
- Audio->PlaySound(SFX_POT_SHATTER);
- item shards = CreateItemAt(IT_DUMMY,this->X,this->Y);
- shards->Pickup = IP_DUMMY | IP_TIMEOUT;
- shards->OriginalTile = cd->Tile + 20;
- shards->Tile = cd->Tile + 20;
- shards->NumFrames = cd->Frames;
- shards->CSet = cd->CSet;
- if(dodrop)
- {
- item it = CreateItemAt(drop, this->X, this->Y);
- it->Pickup = IP_TIMEOUT;
- }
- this->Data = underCombo;
- Quit();
- }
- }
- }
- if(AgainstFFCBase(this) && HoldingObject == HOLD_NONE)
- {
- setGlobalBool(GVAR_AGAINST_PICKUP,GV_MISC_BOOL,true);
- if(Input->Press[CB_R])
- break;
- }
- ffcSolid(this);
- Waitframe();
- }
- //Picked up
- Audio->PlaySound(SFX_PICKUP_OBJ);
- HoldingObject = HOLD_POT;
- item it = CreateItemAt(IT_DUMMY,Hero->X,Hero->Y-8);
- it->Pickup = IP_DUMMY;
- it->OriginalTile = cd->Tile;
- it->Tile = cd->Tile;
- it->NumFrames = cd->Frames;
- it->CSet = cd->CSet;
- it->Script = Game->GetItemSpriteScript("flyingPot");
- it->InitD[0] = drop;
- this->Data = underCombo;
- TotalNoAction();
- }
- }
- itemsprite script flyingPot
- {
- void run(ItemID dropItem)
- {
- bool dodrop = dropItem>-1;
- 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])
- {
- this->Misc[ITEMMISC_LAYERDMAP] = Game->GetCurDMap() + 1;
- this->X = Hero->X;
- this->Y = Hero->Y - 8;
- Waitframe();
- }
- TotalNoAction();
- mapdata map = getLayerMapdata(getRelativeHeight(this));
- this->X = Hero->X;
- this->Y = Hero->Y;
- HoldingObject = HOLD_NONE;
- int dir = HeroDir8,
- pix = Hero->Action==LA_WALKING ? (POT_STEP_MOVING/100) + (1.5+LinkMovement_GetLinkSpeedBoost()) : POT_STEP_STILL/100;
- for(int q = 0; q < 60; ++q)
- {
- while(true)
- {
- int centerCombo = ComboAt(this->X + InFrontCenteredX(dir,pix),this->Y + InFrontCenteredY(dir,pix));
- if(map->ComboI[centerCombo] == CI_RAMP)
- {
- if(map->ComboF[centerCombo] == CF_RAMP_UP)
- {
- ++this->Misc[ITEMMISC_LAYERDMAP];
- map = getLayerMapdata(getRelativeHeight(this));
- continue;
- }
- }
- break;
- }
- unless(MM2D::CanWalkM(this, map, dir, Ceiling(pix),true))
- break;
- if(offscreen(this->X + (dirX(dir) * pix), this->Y + (dirY(dir) * pix)))
- break;
- this->X += dirX(dir) * pix;
- this->Y += dirY(dir) * pix;
- Waitframe();
- }
- Audio->PlaySound(SFX_POT_SHATTER);
- this->OriginalTile += 20; //shatter
- //Fall down pits
- for(int x = this->X+3; x<this->X+13; x+=9)
- {
- for(int y = this->Y+9; y<this->Y+13; y+=3)
- {
- if(map->ComboT[ComboAt(x,y)] == CT_PITFALL)
- {
- --this->Misc[ITEMMISC_LAYERDMAP];
- //Reset loop to re-check next layer:
- x = this->X+3;
- y = this->Y+9;
- map = getLayerMapdata(getRelativeHeight(this));
- }
- }
- }
- if(dodrop)
- {
- item it = CreateItemAt(dropItem,this->X,this->Y);
- it->Misc[ITEMMISC_LAYERDMAP] = this->Misc[ITEMMISC_LAYERDMAP];
- }
- this->Pickup |= IP_TIMEOUT;
- Quit();
- }
- }
- //end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement