Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Moosh.zh constants
- //const int MAX_PUSH = 4;
- //const int CMB_MENUSELECT = 2600; //Combo used for the menu selection cursor. Uses the upper left quarter of the tile block.
- //const int CS_MENUSELECT = 8; //CSet used for the menu selection cursor
- //const int FONT_MENU = 0; //The font used for the menu. FONT_Z1 by default.
- //const int SFX_MENU = 6; //Sound for navigating a menu
- //const int SFX_SELECT = 5; //Sound for making a menu selection
- //const int SFX_CANCEL = 5; //Sound for cancelling a selection
- //const int SFX_ERROR = 5; //Error sound
- //const int WORM_MAX_STEP = 10;
- void DrawComboArc(int Layer, int X1, int Y1, int X2, int Y2, int Combo, int CSet, int Segments, int Curve, int Opacity){
- int a = Angle(X1, Y1, X2, Y2);
- int d = Distance(X1, Y1, X2, Y2);
- int w = 180/d;
- for(int i=0; i<Segments; i++){
- Screen->FastCombo(Layer, X1+VectorX((d/Segments)*i, a)+VectorX(Curve*Sin(w*(d/Segments*i)), a-90), Y1+VectorY((d/Segments)*i, a)+VectorY(Curve*Sin(w*(d/Segments*i)), a-90), Combo, CSet, Opacity);
- }
- }
- int DrawArrayTentacle(int Layer, int TentacleX, int TentacleY, int Combo, int CSet, int MaxLag, int Counter, int CounterIncrement){
- int Size = SizeOfArray(TentacleX);
- for(int i=0; i<Size; i++){
- int Angle = Angle(TentacleX[0], TentacleY[0], TentacleX[Size-1], TentacleY[Size-1]);
- int Distance = Distance(TentacleX[0], TentacleY[0], TentacleX[Size-1], TentacleY[Size-1]);
- int TX = TentacleX[0]+VectorX((Distance/(Size-1))*i, Angle)+VectorX(Sin(180/Size*i)*(Min(8, Distance/8)*Sin(Floor(i/2)*(180/Size)*i+Counter)), Angle+90);
- int TY = TentacleY[0]+VectorY((Distance/(Size-1))*i, Angle)+VectorY(Sin(180/Size*i)*(Min(8, Distance/8)*Sin(Floor(i/2)*(180/Size)*i+Counter)), Angle+90);
- int Lag = 1+MaxLag*Sin(180/Size*i);
- if(i!=0&&i!=Size-1){
- TentacleX[i] += VectorX(Distance(TentacleX[i], TentacleY[i], TX, TY)/Lag, Angle(TentacleX[i], TentacleY[i], TX, TY));
- TentacleY[i] += VectorY(Distance(TentacleX[i], TentacleY[i], TX, TY)/Lag, Angle(TentacleX[i], TentacleY[i], TX, TY));
- }
- Screen->FastCombo(Layer, TentacleX[i], TentacleY[i], Combo, CSet, 128);
- }
- Counter += CounterIncrement;
- if(Counter>360){
- Counter -= 360;
- }
- return Counter;
- }
- void NoWalk(){
- Link->InputUp=false;
- Link->InputDown=false;
- Link->InputRight=false;
- Link->InputLeft=false;
- }
- void NoButton(){
- Link->InputA=false;
- Link->InputB=false;
- Link->InputL=false;
- Link->InputR=false;
- Link->PressA=false;
- Link->PressB=false;
- Link->PressL=false;
- Link->PressR=false;
- }
- bool PressButtonItem(int itm){
- if(GetEquipmentA()==itm&&Link->PressA)return true;
- else if(GetEquipmentB()==itm&&Link->PressB)return true;
- return false;
- }
- bool InputButtonItem(int itm){
- if(GetEquipmentA()==itm&&Link->InputA)return true;
- else if(GetEquipmentB()==itm&&Link->InputB)return true;
- return false;
- }
- int DirAngle(int Dir){
- if(Dir==DIR_UP)return -90;
- else if(Dir==DIR_DOWN)return 90;
- else if(Dir==DIR_LEFT)return 180;
- else if(Dir==DIR_RIGHT)return 0;
- else if(Dir==DIR_LEFTUP)return -135;
- else if(Dir==DIR_RIGHTUP)return -45;
- else if(Dir==DIR_LEFTDOWN)return 135;
- else if(Dir==DIR_RIGHTDOWN)return 45;
- }
- bool Xor(bool A, bool B){
- if((A&&!B)||(B&&!A))
- return true;
- return false;
- }
- void DrawTrueMapPosition(int Layer, int Map, int X, int Y){
- int MinScreen = Floor(X/256)+16*Floor(Y/176);
- Screen->Rectangle(Layer, 0, 0, 255, 175, 0, 1, 0, 0, 0, true, 128);
- int TLX = -(X%256);
- int TLY = -(Y%176);
- Screen->DrawScreen(Layer, Map, MinScreen, TLX, TLY, 0);
- Screen->DrawScreen(Layer, Map, MinScreen+1, TLX+256, TLY, 0);
- Screen->DrawScreen(Layer, Map, MinScreen+16, TLX, TLY+176, 0);
- Screen->DrawScreen(Layer, Map, MinScreen+17, TLX+256, TLY+176, 0);
- //Screen->DrawInteger(5, 8, 8, FONT_Z3SMALL, 0x01, -1, -1, -1, MinScreen, 0, 128);
- }
- float LargeDistance(int x1, int y1, int x2, int y2){
- int c1x = (x1+x2)/2;
- int c1y = (y1+y2)/2;
- int c2x = (x1+c1x)/2;
- int c2y = (y1+c1y)/2;
- int c3x = (x1+c2x)/2;
- int c3y = (y1+c2y)/2;
- return Distance(x1, y1, c3x, c3y)*8;
- }
- void ScreenPan(int Layer, int Map, int StartScreen, int EndScreen, int Duration){
- int StartX = StartScreen%16*256;
- int StartY = Floor(StartScreen/16)*176;
- int EndX = EndScreen%16*256;
- int EndY = Floor(EndScreen/16)*176;
- int X = StartX;
- int Y = StartY;
- int Distance = LargeDistance(StartX, StartY, EndX, EndY);
- for(int i=0; i<Duration; i++){
- DrawTrueMapPosition(Layer, Map, X, Y);
- X += VectorX(Distance/Duration, Angle(StartX, StartY, EndX, EndY));
- Y += VectorY(Distance/Duration, Angle(StartX, StartY, EndX, EndY));
- WaitNoAction();
- }
- }
- void ScreenPan2(int Layer, int Map, int StartScreen, int EndScreen, int Speed){
- int StartX = StartScreen%16*256;
- int StartY = Floor(StartScreen/16)*176;
- int EndX = EndScreen%16*256;
- int EndY = Floor(EndScreen/16)*176;
- int X = StartX;
- int Y = StartY;
- int Distance = LargeDistance(StartX, StartY, EndX, EndY);
- while(LargeDistance(X, Y, EndX, EndY)>Speed){
- DrawTrueMapPosition(Layer, Map, X, Y);
- X += VectorX(Speed, Angle(StartX, StartY, EndX, EndY));
- Y += VectorY(Speed, Angle(StartX, StartY, EndX, EndY));
- WaitNoAction();
- }
- }
- void ScreenHold(int Layer, int Map, int Screen, int Duration){
- int X = Screen%16*256;
- int Y = Floor(Screen/16)*176;
- for(int i=0; i<Duration; i++){
- DrawTrueMapPosition(Layer, Map, X, Y);
- WaitNoAction();
- }
- }
- // void NoWalk(){
- // Link->InputUp = false; Link->PressUp = false;
- // Link->InputDown = false; Link->PressDown = false;
- // Link->InputLeft = false; Link->PressLeft = false;
- // Link->InputRight = false; Link->PressRight = false;
- // }
- bool LeavingScreen(){
- if(Link->X<2&&Link->InputLeft)
- return true;
- if(Link->X>238&&Link->InputRight)
- return true;
- if(Link->Y<2&&Link->InputUp)
- return true;
- if(Link->Y>158&&Link->InputDown)
- return true;
- return false;
- }
- //This function checks the path of the beamos' laser before firing
- bool CheckPath(int X, int Y, int Angle, int Distance, int SafeDist, int Step){
- for(int i = 0; i<Distance-Step; i+=Step){
- X += VectorX(Step, Angle);
- Y += VectorY(Step, Angle);
- if(Screen->isSolid(X, Y)&&i>SafeDist)
- return false;
- }
- return true;
- }
- void DrawTile(int layer, int cx, int cy, int tile, int blockw, int blockh, int cset, int xscale, int yscale, int rx, int ry, int rangle, int flip, bool transparency, int opacity){
- int w = xscale;
- if(xscale==-1)
- w = blockw*16;
- int h = yscale;
- if(yscale==-1)
- h = blockh*16;
- Screen->DrawTile(layer, cx-w/2, cy-h/2, tile, blockw, blockh, cset, xscale, yscale, rx-w/2, ry-h/2, rangle, flip, transparency, opacity);
- }
- void DrawCombo(int layer, int cx, int cy, int tile, int blockw, int blockh, int cset, int xscale, int yscale, int rx, int ry, int rangle, int frame, int flip, bool transparency, int opacity){
- int w = xscale;
- if(xscale==-1)
- w = blockw*16;
- int h = yscale;
- if(yscale==-1)
- h = blockh*16;
- Screen->DrawCombo(layer, cx-w/2, cy-h/2, tile, blockw, blockh, cset, xscale, yscale, rx-w/2, ry-h/2, rangle, frame, flip, transparency, opacity);
- }
- bool PixelCollision(int PixX, int PixY, int BoxX, int BoxY, int BoxWidth, int BoxHeight){
- if(PixX>=BoxX&&PixX<=BoxX+BoxWidth&&PixY>=BoxY&&PixY<=BoxY+BoxHeight)
- return true;
- return false;
- }
- //const int MAX_PUSH = 4;
- void HandlePushArray(int PushArray, int Imprecision){
- for(int i=0; i<MAX_PUSH&&PushArray[0]<=-1; i++){
- if(CanWalk(Link->X, Link->Y, DIR_LEFT, 1, false)){
- Link->X--;
- PushArray[0]++;
- }
- else if(Imprecision>0&&Abs(GridY(Link->Y+8)-Link->Y)<Imprecision&&CanWalk(Link->X, GridY(Link->Y+8), DIR_LEFT, 1, false)){
- Link->Y = GridY(Link->Y+8);
- Link->X--;
- PushArray[0]++;
- }
- else{
- PushArray[0] = 0;
- }
- }
- for(int i=0; i<MAX_PUSH&&PushArray[0]>=1; i++){
- if(CanWalk(Link->X, Link->Y, DIR_RIGHT, 1, false)){
- Link->X++;
- PushArray[0]--;
- }
- else if(Imprecision>0&&Abs(GridY(Link->Y+8)-Link->Y)<Imprecision&&CanWalk(Link->X, GridY(Link->Y+8), DIR_RIGHT, 1, false)){
- Link->Y = GridY(Link->Y+8);
- Link->X++;
- PushArray[0]++;
- }
- else{
- PushArray[0] = 0;
- }
- }
- for(int i=0; i<MAX_PUSH&&PushArray[1]<=-1; i++){
- if(CanWalk(Link->X, Link->Y, DIR_UP, 1, false)){
- Link->Y--;
- PushArray[1]++;
- }
- else if(Imprecision>0&&Abs(GridX(Link->X+8)-Link->X)<Imprecision&&CanWalk(GridX(Link->X+8), Link->Y, DIR_UP, 1, false)){
- Link->X = GridX(Link->X+8);
- Link->Y--;
- PushArray[0]++;
- }
- else{
- PushArray[1] = 0;
- }
- }
- for(int i=0; i<MAX_PUSH&&PushArray[1]>=1; i++){
- if(CanWalk(Link->X, Link->Y, DIR_DOWN, 1, false)){
- Link->Y++;
- PushArray[1]--;
- }
- else if(Imprecision>0&&Abs(GridX(Link->X+8)-Link->X)<Imprecision&&CanWalk(GridX(Link->X+8), Link->Y, DIR_DOWN, 1, false)){
- Link->X = GridX(Link->X+8);
- Link->Y++;
- PushArray[0]++;
- }
- else{
- PushArray[1] = 0;
- }
- }
- }
- void SetNPCHitbox(npc n, int OffX, int OffY, int HitX, int HitY){
- n->HitXOffset = OffX;
- n->HitYOffset = OffY;
- n->HitWidth = HitX;
- n->HitHeight = HitY;
- }
- void SetEWeaponHitbox(eweapon e , int OffX, int OffY, int HitX, int HitY){
- e->HitXOffset = OffX;
- e->HitYOffset = OffY;
- e->HitWidth = HitX;
- e->HitHeight = HitY;
- }
- void SetLWeaponHitbox(lweapon l, int OffX, int OffY, int HitX, int HitY){
- l->HitXOffset = OffX;
- l->HitYOffset = OffY;
- l->HitWidth = HitX;
- l->HitHeight = HitY;
- }
- int SwordDirX(int dir){
- if(dir==DIR_UP)
- return 0;
- else if(dir==DIR_DOWN)
- return 0;
- else if(dir==DIR_LEFT)
- return -15;
- else if(dir==DIR_RIGHT)
- return 15;
- else if(dir==DIR_LEFTUP)
- return -12;
- else if(dir==DIR_RIGHTUP)
- return 12;
- else if(dir==DIR_LEFTDOWN)
- return -12;
- else if(dir==DIR_RIGHTDOWN)
- return 12;
- }
- int SwordDirXBig(int dir, int width){
- if(dir==DIR_UP)
- return -(width-1)*8;
- else if(dir==DIR_DOWN)
- return -(width-1)*8;
- else if(dir==DIR_LEFT)
- return -width*15;
- else if(dir==DIR_RIGHT)
- return 15;
- else if(dir==DIR_LEFTUP)
- return -12-(width-1)*16;
- else if(dir==DIR_RIGHTUP)
- return 12;
- else if(dir==DIR_LEFTDOWN)
- return -12-(width-1)*16;
- else if(dir==DIR_RIGHTDOWN)
- return 12;
- }
- int SwordDirY(int dir){
- if(dir==DIR_UP)
- return -15;
- else if(dir==DIR_DOWN)
- return 15;
- else if(dir==DIR_LEFT)
- return 0;
- else if(dir==DIR_RIGHT)
- return 0;
- else if(dir==DIR_LEFTUP)
- return -12;
- else if(dir==DIR_RIGHTUP)
- return -12;
- else if(dir==DIR_LEFTDOWN)
- return 12;
- else if(dir==DIR_RIGHTDOWN)
- return 12;
- }
- int SwordDirYBig(int dir, int width){
- if(dir==DIR_UP)
- return -width*15;
- else if(dir==DIR_DOWN)
- return 15;
- else if(dir==DIR_LEFT)
- return -(width-1)*8;
- else if(dir==DIR_RIGHT)
- return -(width-1)*8;
- else if(dir==DIR_LEFTUP)
- return -12-(width-1)*16;
- else if(dir==DIR_RIGHTUP)
- return -12-(width-1)*16;
- else if(dir==DIR_LEFTDOWN)
- return 12;
- else if(dir==DIR_RIGHTDOWN)
- return 12;
- }
- int SwordSlashDefault(int dir, int frame, int maxframe){
- int state = Floor(frame/Ceiling(maxframe/3));
- if(dir==DIR_UP){
- if(state==0)
- return DIR_RIGHT;
- else if(state==1)
- return DIR_RIGHTUP;
- else
- return DIR_UP;
- }
- else if(dir==DIR_DOWN){
- if(state==0)
- return DIR_LEFT;
- else if(state==1)
- return DIR_LEFTDOWN;
- else
- return DIR_DOWN;
- }
- else if(dir==DIR_LEFT){
- if(state==0)
- return DIR_UP;
- else if(state==1)
- return DIR_LEFTUP;
- else
- return DIR_LEFT;
- }
- else if(dir==DIR_RIGHT){
- if(state==0)
- return DIR_UP;
- else if(state==1)
- return DIR_RIGHTUP;
- else
- return DIR_RIGHT;
- }
- }
- int SwordSlashLTTP(int dir, int frame, int maxframe){
- int state = Floor(frame/Ceiling(maxframe/3));
- if(dir==DIR_UP){
- if(state==0)
- return DIR_RIGHTUP;
- else if(state==1)
- return DIR_UP;
- else
- return DIR_LEFTUP;
- }
- else if(dir==DIR_DOWN){
- if(state==0)
- return DIR_LEFTDOWN;
- else if(state==1)
- return DIR_DOWN;
- else
- return DIR_RIGHTDOWN;
- }
- else if(dir==DIR_LEFT){
- if(state==0)
- return DIR_LEFTUP;
- else if(state==1)
- return DIR_LEFT;
- else
- return DIR_LEFTDOWN;
- }
- else if(dir==DIR_RIGHT){
- if(state==0)
- return DIR_RIGHTUP;
- else if(state==1)
- return DIR_RIGHT;
- else
- return DIR_RIGHTDOWN;
- }
- }
- int SwordSlash180(int dir, int frame, int maxframe){
- int state = Floor(frame/Ceiling(maxframe/5));
- if(dir==DIR_UP){
- if(state==0)
- return DIR_RIGHT;
- else if(state==1)
- return DIR_RIGHTUP;
- else if(state==2)
- return DIR_UP;
- else if(state==3)
- return DIR_LEFTUP;
- else
- return DIR_LEFT;
- }
- else if(dir==DIR_DOWN){
- if(state==0)
- return DIR_LEFT;
- else if(state==1)
- return DIR_LEFTDOWN;
- else if(state==2)
- return DIR_DOWN;
- else if(state==3)
- return DIR_RIGHTDOWN;
- else
- return DIR_RIGHT;
- }
- else if(dir==DIR_LEFT){
- if(state==0)
- return DIR_UP;
- else if(state==1)
- return DIR_LEFTUP;
- else if(state==2)
- return DIR_LEFT;
- else if(state==3)
- return DIR_LEFTDOWN;
- else
- return DIR_DOWN;
- }
- else if(dir==DIR_RIGHT){
- if(state==0)
- return DIR_UP;
- else if(state==1)
- return DIR_RIGHTUP;
- else if(state==2)
- return DIR_RIGHT;
- else if(state==3)
- return DIR_RIGHTDOWN;
- else
- return DIR_DOWN;
- }
- }
- //const int CMB_MENUSELECT = 2600; //Combo used for the menu selection cursor. Uses the upper left quarter of the tile block.
- //const int CS_MENUSELECT = 8; //CSet used for the menu selection cursor
- //const int FONT_MENU = 0; //The font used for the menu. FONT_Z1 by default.
- //const int SFX_MENU = 6; //Sound for navigating a menu
- //const int SFX_SELECT = 5; //Sound for making a menu selection
- //const int SFX_CANCEL = 5; //Sound for cancelling a selection
- //const int SFX_ERROR = 5; //Error sound
- //Function for setting the arrays for the drawn tile blocks. You can also set them like int Frame[7] = {...};
- // - int vars is the array you're setting
- // - int layer is the layer to draw to
- // - int X is the X position to draw to
- // - int Y is the Y position to draw to
- // - int Tile is the top left corner of the tile block
- // - int CSet is the cset to draw in
- // - int Width is the width of the tile block
- // - int Height is the height of the tile block
- void DefineFrame(int vars, int layer, int X, int Y, int Tile, int CSet, int Width, int Height){
- vars[0] = layer;
- vars[1] = X;
- vars[2] = Y;
- vars[3] = Tile;
- vars[4] = CSet;
- vars[5] = Width;
- vars[6] = Height;
- }
- //Function for just running a regular menu.
- // - int choices is an array of strings for the selection choices
- // - int textframe is an array for a drawn tile block for the last string displayed. Set to 0 for no text box.
- // - int selframe is an array for a drawn tile block for the text box behind the choices.
- // - int default is the choice that the selection defaults to. It starts from 0 in the choices array.
- // - bool cancel is whether or not the player can cancel the choice by pressing B. A cancel returns -1.
- int MenuChoice(int choices, int textframe, int selframe, int default, bool cancel){
- int select = default;
- int numchoices = SizeOfArray(choices);
- while(true){
- if(textframe[3]>0)
- Screen->DrawTile(textframe[0], textframe[1], textframe[2], textframe[3], textframe[5], textframe[6], textframe[4], -1, -1, 0, 0, 0, 0, true, 128);
- if(selframe[3]>0)
- Screen->DrawTile(selframe[0], selframe[1], selframe[2], selframe[3], selframe[5], selframe[6], selframe[4], -1, -1, 0, 0, 0, 0, true, 128);
- for(int i=0; i<numchoices; i++){
- int str = choices[i];
- Screen->DrawString(selframe[0], selframe[1]+16, selframe[2]+12+12*i, FONT_MENU, 1, -1, TF_NORMAL, str, 128);
- if(select==i)
- Screen->FastCombo(selframe[0], selframe[1]+8, selframe[2]+12+12*i, CMB_MENUSELECT, CS_MENUSELECT, 128);
- }
- if(Link->PressUp){
- Game->PlaySound(SFX_MENU);
- select--;
- if(select<0)
- select = numchoices-1;
- }
- else if(Link->PressDown){
- Game->PlaySound(SFX_MENU);
- select++;
- if(select>=numchoices)
- select = 0;
- }
- else if(Link->PressA){
- Link->PressA = false;
- Link->InputA = false;
- Game->PlaySound(SFX_SELECT);
- break;
- }
- else if(Link->PressB&&cancel){
- Link->PressB = false;
- Link->InputB = false;
- Game->PlaySound(SFX_CANCEL);
- select = -1;
- break;
- }
- Link->PressStart = false;
- Link->InputStart = false;
- WaitNoAction();
- }
- return select;
- }
- //Function for running a menu in a single frame
- // - int vars is a hack method I used to keep track of stuff I otherwise couldn't in one frame. It's an array with a size of 2.
- // - vars[0] is the current menu selection
- // - vars[1] is whether or not the player has made a selection
- // - int choices is an array of strings for the selection choices
- // - int textframe is an array for a drawn tile block for the last string displayed. Set to 0 for no text box.
- // - int selframe is an array for a drawn tile block for the text box behind the choices.
- // - bool cancel is whether or not the player can cancel the choice by pressing B. A cancel returns -1.
- //This function is meant to be called in a while loop that runs while vars[1] is 0.
- //This function should only be needed if there's something you need to do in the script while the menu is open based on the current menu selection.
- int MenuChoice2(int vars, int choices, int textframe, int selframe, bool cancel){
- int numchoices = SizeOfArray(choices);
- if(textframe[3]>0)
- Screen->DrawTile(textframe[0], textframe[1], textframe[2], textframe[3], textframe[5], textframe[6], textframe[4], -1, -1, 0, 0, 0, 0, true, 128);
- if(selframe[3]>0)
- Screen->DrawTile(selframe[0], selframe[1], selframe[2], selframe[3], selframe[5], selframe[6], selframe[4], -1, -1, 0, 0, 0, 0, true, 128);
- for(int i=0; i<numchoices; i++){
- int str = choices[i];
- Screen->DrawString(selframe[0], selframe[1]+16, selframe[2]+12+12*i, FONT_MENU, 1, -1, TF_NORMAL, str, 128);
- if(vars[0]==i)
- Screen->FastCombo(selframe[0], selframe[1]+8, selframe[2]+12+12*i, CMB_MENUSELECT, CS_MENUSELECT, 128);
- }
- if(Link->PressUp){
- Game->PlaySound(SFX_MENU);
- vars[0]--;
- if(vars[0]<0)
- vars[0] = numchoices-1;
- }
- else if(Link->PressDown){
- Game->PlaySound(SFX_MENU);
- vars[0]++;
- if(vars[0]>=numchoices)
- vars[0] = 0;
- }
- else if(Link->PressA){
- Link->PressA = false;
- Link->InputA = false;
- Game->PlaySound(SFX_SELECT);
- vars[1] = 1;
- }
- else if(Link->PressB&&cancel){
- Link->PressB = false;
- Link->InputB = false;
- Game->PlaySound(SFX_CANCEL);
- vars[0] = -1;
- vars[1] = 1;
- }
- Link->PressStart = false;
- Link->InputStart = false;
- }
- bool CanSee(int X, int Y, int Dir, int Width, int X2, int Y2){
- if(Dir==DIR_UP){
- return (X2>=X-Width/2&&X2<=X+Width/2&&Y2<Y);
- }
- else if(Dir==DIR_DOWN){
- return (X2>=X-Width/2&&X2<=X+Width/2&&Y2>Y);
- }
- else if(Dir==DIR_LEFT){
- return (Y2>=Y-Width/2&&Y2<=Y+Width/2&&X2<X);
- }
- else if(Dir==DIR_RIGHT){
- return (Y2>=Y-Width/2&&Y2<=Y+Width/2&&X2>X);
- }
- }
- int ReflectAngleH(int angle){
- int VX = VectorX(10, angle);
- int VY = VectorY(10, angle);
- VX = -VX;
- return Angle(0, 0, VX, VY);
- }
- int ReflectAngleV(int angle){
- int VX = VectorX(10, angle);
- int VY = VectorY(10, angle);
- VY = -VY;
- return Angle(0, 0, VX, VY);
- }
- int DrawDebug(int DebugArray){
- for(int i=0; i<SizeOfArray(DebugArray); i++){
- int y = i*8;
- int op = 128;
- if(Link->InputEx1)
- op = 64;
- Screen->DrawInteger(6, 0, y, FONT_Z3SMALL, 0x01, -1, -1, -1, DebugArray[i], 4, op);
- }
- }
- int DrawDebug(int DebugArray, int DebugStrings){
- for(int i=0; i<SizeOfArray(DebugArray); i++){
- int str = DebugStrings[i];
- int x = SizeOfArray(str)*6+6;
- int y = i*8;
- int op = 128;
- if(Link->InputEx1)
- op = 64;
- Screen->DrawString(6, 0, y, FONT_Z3SMALL, 0x01, -1, TF_NORMAL, str, op);
- Screen->DrawInteger(6, x, y, FONT_Z3SMALL, 0x01, -1, -1, -1, DebugArray[i], 4, op);
- }
- }
- //Turns an LWeapon into an EWeapon
- eweapon LWeaponToEWeapon(lweapon a) {
- eweapon b = Screen->CreateEWeapon(a->ID);
- b->X = a->X;
- b->Y = a->Y;
- b->Z = a->Z;
- b->Jump = a->Jump;
- b->Extend = a->Extend;
- b->TileWidth = a->TileWidth;
- b->TileHeight = a->TileHeight;
- b->HitWidth = a->HitWidth;
- b->HitHeight = a->HitHeight;
- b->HitZHeight = a->HitZHeight;
- b->HitXOffset = a->HitXOffset;
- b->HitYOffset = a->HitYOffset;
- b->DrawXOffset = a->DrawXOffset;
- b->DrawYOffset = a->DrawYOffset;
- b->DrawZOffset = a->DrawZOffset;
- b->Tile = a->Tile;
- b->CSet = a->CSet;
- b->DrawStyle = a->DrawStyle;
- b->Dir = a->Dir;
- b->OriginalTile = a->OriginalTile;
- b->OriginalCSet = a->OriginalCSet;
- b->FlashCSet = a->FlashCSet;
- b->NumFrames = a->NumFrames;
- b->Frame = a->Frame;
- b->ASpeed = a->ASpeed;
- b->Damage = a->Damage;
- b->Step = a->Step;
- b->Angle = a->Angle;
- b->Angular = a->Angular;
- b->CollDetection = a->CollDetection;
- b->DeadState = a->DeadState;
- b->Flash = a->Flash;
- b->Flip = a->Flip;
- for (int i = 0; i < 16; i++)
- b->Misc[i] = a->Misc[i];
- return b;
- }
- //Turns an EWeapon into an LWeapon
- lweapon EWeaponToLWeapon(eweapon a) {
- lweapon b = Screen->CreateLWeapon(a->ID);
- b->X = a->X;
- b->Y = a->Y;
- b->Z = a->Z;
- b->Jump = a->Jump;
- b->Extend = a->Extend;
- b->TileWidth = a->TileWidth;
- b->TileHeight = a->TileHeight;
- b->HitWidth = a->HitWidth;
- b->HitHeight = a->HitHeight;
- b->HitZHeight = a->HitZHeight;
- b->HitXOffset = a->HitXOffset;
- b->HitYOffset = a->HitYOffset;
- b->DrawXOffset = a->DrawXOffset;
- b->DrawYOffset = a->DrawYOffset;
- b->DrawZOffset = a->DrawZOffset;
- b->Tile = a->Tile;
- b->CSet = a->CSet;
- b->DrawStyle = a->DrawStyle;
- b->Dir = a->Dir;
- b->OriginalTile = a->OriginalTile;
- b->OriginalCSet = a->OriginalCSet;
- b->FlashCSet = a->FlashCSet;
- b->NumFrames = a->NumFrames;
- b->Frame = a->Frame;
- b->ASpeed = a->ASpeed;
- b->Damage = a->Damage;
- b->Step = a->Step;
- b->Angle = a->Angle;
- b->Angular = a->Angular;
- b->CollDetection = a->CollDetection;
- b->DeadState = a->DeadState;
- b->Flash = a->Flash;
- b->Flip = a->Flip;
- for (int i = 0; i < 16; i++)
- b->Misc[i] = a->Misc[i];
- return b;
- }
- void SortLowestToHighestAndReturnOrder(int arrayold, int arrayorder){
- int lowest = 214747;
- int lowestindex = 0;
- bool used[256];
- for(int i=0; i<SizeOfArray(arrayorder); i++){
- for(int j=0; j<SizeOfArray(arrayold); j++){
- if(arrayold[j]<=lowest&&!used[j]){
- lowest = arrayold[j];
- lowestindex = j;
- }
- }
- arrayorder[i] = lowestindex;
- used[lowestindex] = true;
- lowest = 214747;
- }
- }
- void PrintArray(int array){
- int strarray[128];
- for(int i=0; i<SizeOfArray(array); i++){
- int strspacing[] = ", ";
- int strval[8];
- itoa(strval, array[i]);
- strcat(strarray, strval);
- strcat(strarray, strspacing);
- }
- Screen->DrawString(6, 128, 8, FONT_Z1, 0x01, 0x00, TF_CENTERED, strarray, 128);
- }
- bool LineCollision(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4){
- // Screen->Line(6, x1, y1, x2, y2, 0x01, 1, 0, 0, 0, 128);
- // Screen->Line(6, x3, y3, x4, y4, 0x01, 1, 0, 0, 0, 128);
- int x[4];
- int y[4];
- if(x1>x2){
- x[0] = x2;
- y[0] = y2;
- x[1] = x1;
- y[1] = y1;
- }
- else{
- x[0] = x1;
- y[0] = y1;
- x[1] = x2;
- y[1] = y2;
- }
- if(x3>x4){
- x[2] = x4;
- y[2] = y4;
- x[3] = x3;
- y[3] = y3;
- }
- else{
- x[2] = x3;
- y[2] = y3;
- x[3] = x4;
- y[3] = y4;
- }
- // x[0] = Min(x1, x2);
- // y[0] = Min(y1, y2);
- // x[1] = Max(x1, x2);
- // y[1] = Max(y1, y2);
- // x[2] = Min(x3, x4);
- // y[2] = Min(y3, y4);
- // x[3] = Max(x3, x4);
- // y[3] = Max(y3, y4);
- float risea = y[1]-y[0];
- float runa = x[1]-x[0];
- float riseb = y[3]-y[2];
- float runb = x[3]-x[2];
- int intersectx;
- int intersecty;
- float slopea;
- float slopeb;
- int startya;
- int startyb;
- if(Abs(runa)>0&&Abs(runb)>0){
- slopea = risea/runa;
- slopeb = riseb/runb;
- startya = y[0]-(slopea*x[0]);
- startyb = y[2]-(slopeb*x[2]);
- if(slopea==slopeb)
- return false;
- //y = slopea*x+startya
- //y = slopeb*x+startyb
- //slopea*x+startya = slopeb*x+startyb
- //startyb = slopeb*x-slopea*x+startyb
- //startya = (slopeb-slopea)*x+startyb
- //startya-startyb = (slopeb-slopea)*x
- //x = (startya-startyb)/(slopeb-slopea)
- intersectx = (startya-startyb)/(slopeb-slopea);
- intersecty = slopea*intersectx+startya;
- if(intersectx>=x[0]&&intersectx<=x[1]&&intersectx>=x[2]&&intersectx<=x[3]){
- return true;
- }
- }
- else{
- int minxa = Min(x1, x2);
- int minya = Min(y1, y2);
- int maxxa = Max(x1, x2);
- int maxya = Max(y1, y2);
- int minxb = Min(x3, x4);
- int minyb = Min(y3, y4);
- int maxxb = Max(x3, x4);
- int maxyb = Max(y3, y4);
- if(Abs(runa)>0){
- slopea = risea/runa;
- startya = y[0]-(slopea*x[0]);
- intersectx = x[2];
- intersecty = startya+slopea*x[2];
- if(minxa<=intersectx&&maxxa>=intersectx&&minyb<=intersecty&&maxyb>=intersecty)
- return true;
- }
- else if(Abs(runb)>0){
- slopeb = riseb/runb;
- startyb = y[2]-(slopeb*x[2]);
- intersectx = x[0];
- intersecty = startyb+slopeb*x[0];
- if(minxb<=intersectx&&maxxb>=intersectx&&minya<=intersecty&&maxya>=intersecty)
- return true;
- }
- else if(x[0]==x[2]&&((minya<=maxyb&&minya>=minyb)||(minyb<=maxya&&minyb>=minya)))
- return true;
- }
- return false;
- }
- void DrawTileFix(int layer, int x, int y, int tile, int blockw, int blockh, int cset, int xscale, int yscale, int rx, int ry, int rangle, int flip, bool transparency, int opacity){
- if(ScreenFlag(1, 4)&&layer==2)
- layer = 1;
- else if(ScreenFlag(1, 5)&&layer==3)
- layer = 4;
- Screen->DrawTile(layer, x, y, tile, blockw, blockh, cset, xscale, yscale, rx, ry, rangle, flip, transparency, opacity);
- }
- void DrawComboFix(int layer, int x, int y, int combo, int w, int h, int cset, int xscale, int yscale, int rx, int ry, int rangle, int frame, int flip, bool transparency, int opacity){
- if(ScreenFlag(1, 4)&&layer==2)
- layer = 1;
- else if(ScreenFlag(1, 5)&&layer==3)
- layer = 4;
- Screen->DrawCombo(layer, x, y, combo, w, h, cset, xscale, yscale, rx, ry, rangle, frame, flip, transparency, opacity);
- }
- void FastTileFix(int layer, int x, int y, int tile, int cset, int opacity){
- if(ScreenFlag(1, 4)&&layer==2)
- layer = 1;
- else if(ScreenFlag(1, 5)&&layer==3)
- layer = 4;
- Screen->FastTile(layer, x, y, tile, cset, opacity);
- }
- void FastComboFix(int layer, int x, int y, int combo, int cset, int opacity){
- if(ScreenFlag(1, 4)&&layer==2)
- layer = 1;
- else if(ScreenFlag(1, 5)&&layer==3)
- layer = 4;
- Screen->FastCombo(layer, x, y, combo, cset, opacity);
- }
- //const int WORM_MAX_STEP = 10;
- void DEATHWORM(int X, int Y, int WormX, int WormY){
- int Length = SizeOfArray(WormX);
- int OldX = WormX[0];
- int OldY = WormY[0];
- int Step = Floor(Distance(X, Y, WormX[0], WormY[0]));
- if(Step>WORM_MAX_STEP){
- for(int i=Length-1; i>0; i--){
- WormX[i] = WormX[i-1];
- WormY[i] = WormY[i-1];
- }
- WormX[0] = X;
- WormY[0] = Y;
- }
- else if(Step>0){
- for(int i=Length-1; i>Step; i--){
- WormX[i] = WormX[i-Step];
- WormY[i] = WormY[i-Step];
- }
- for(int i=0; i<=Step; i++){
- WormX[i] = X+VectorX(i, Angle(X, Y, OldX, OldY));
- WormY[i] = Y+VectorY(i, Angle(X, Y, OldX, OldY));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement