import "std.zh" import "ffcscript.zh" item script AutofireBow { void run(int fireRate, int sprite, int itemID) { int string[] = "AutofireBowFFC"; int ffcscript = Game->GetFFCScript(string); if(CountFFCsRunning(ffcscript)==0) { int args[8] = {fireRate, sprite, itemID}; RunFFCScript(ffcscript, args); } } } ffc script AutofireBowFFC { void run(int fireRate, int sprite, int itemID) { int timer; itemdata itmdata = Game->LoadItemData(GetHighestLevelInventoryItem(IC_BOW)); if(itmdata->InitD[0] != 1) Quit(); int speed = itmdata->Power*200; //Base Arrow Speed is 200 itmdata = Game->LoadItemData(itemID); LINK_AUTOFIRE = Link->Dir; while(UsingItem(itemID) && (Link->Item[I_QUIVER4] || Game->Counter[CR_ARROWS] > 0)) //(Link->Item[I_WALLET3] || Game->Counter[CR_RUPEES] > 0)) { timer = (timer+1)%fireRate; if(timer==0) { if(!Link->Item[I_QUIVER4]) Game->Counter[CR_ARROWS]--; //if(!Link->Item[I_WALLET3]) Game->Counter[CR_RUPEES]--; lweapon l = Screen->CreateLWeapon(LW_ARROW); l->X = Link->X+InFrontX(Link->Dir,-3); l->Y = Link->Y+InFrontY(Link->Dir,-3); l->Dir = LINK_AUTOFIRE; l->Step = speed; l->UseSprite(sprite); if(Link->Dir==DIR_DOWN) l->Flip=3; else if(Link->Dir==DIR_LEFT) l->Flip=7; else if(Link->Dir==DIR_RIGHT) l->Flip=4; l->Damage = itmdata->Power*2; Game->PlaySound(itmdata->UseSound); } Waitframe(); } LINK_AUTOFIRE = -1; } int GetHighestLevelInventoryItem(int itemclass) { itemdata id; int ret = -1; int curlevel = -1000; //143 is default max items, increase if you add lots of your own for(int i = 0; i < 143; i++) { id = Game->LoadItemData(i); if(id->Family != itemclass) continue; if(!Link->Item[i]) continue; if(id->Level > curlevel) { curlevel = id->Level; ret = i; } } return ret; } } int LINK_AUTOFIRE; global script slot2 { void run() { LINK_AUTOFIRE=-1; while(true) { Waitdraw(); if(LINK_AUTOFIRE != -1) Link->Dir = LINK_AUTOFIRE; Waitframe(); } } }