Spell Gun

Version:

1.0

Added on:

27 Jul 2013 12:18

Tags:

No tags added for this snippet.

Description:
It works like the spell shot by the witch enemy, it transforms other players into frogs for ten seconds.
int frogTime = 0;
bool playerIsFrog = false;
bool frogTimer = false;
const int cSpellLifeTime = 55;

float distance(float x1, float y1, float x2, float y2) {
  return sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)*(y2 - y1));
}
 
float sqrt(float x) {
  float y = 1.0;
  for (int i = 0; i < 20; i++)
    y = (y + x/y)/2;
  return y;
}

void CreateSpell(int objectID) {
  int playerID = jjObjects[objectID].creator - 32768;
  int spellID = jjAddObject(OBJECT::FASTFEET, jjPlayers[playerID].xPos+(jjPlayers[playerID].direction*48), jjPlayers[playerID].yPos, jjPlayers[playerID].playerID, CREATOR::PLAYER);
  jjObjects[spellID].determineCurAnim(ANIM::WITCH, 3, true);
  jjObjects[spellID].direction = jjPlayers[playerID].direction;
}
 
void DestroySpell(int spellID) {
  int explosionID = jjAddObject(OBJECT::ELECTROBULLET, jjObjects[spellID].xPos, jjObjects[spellID].yPos, jjObjects[spellID].creator, CREATOR::PLAYER);
  jjDeleteObject(spellID);
  jjObjects[explosionID].determineCurAnim(ANIM::AMMO, 1, true);
  jjObjects[explosionID].state = STATE::EXPLODE;
}

void onMain() {
  p.ammo[9] = 3;
  
  if (frogTime > 0) frogTime--;
  
  for(int i = 1; i < jjObjectCount; i++) {
    if (jjObjects[i].isActive && jjObjects[i].eventID == OBJECT::FASTFEET) {
        if (distance(p.xPos, p.yPos, jjObjects[i].xPos, jjObjects[i].yPos) < 16) {
          p.morphTo(CHAR::FROG, true);
        }
        jjObjects[i].ySpeed = 0;
        jjObjects[i].xPos = jjObjects[i].xPos+(jjObjects[i].direction*10);
        jjObjects[i].objType = 3;
    }
  }
  
  for (int i = 0;  i < jjObjectCount; i++)
    if (jjObjects[i].isActive && jjObjects[i].creatorType == CREATOR::PLAYER) {
    //Create spell
    if (jjObjects[i].eventID == OBJECT::ELECTROBULLET && jjObjects[i].state != STATE::EXPLODE) {
      jjDeleteObject(i);
      CreateSpell(i);
      continue;
    }
   
    //Destroy spell
    if (jjObjects[i].eventID == OBJECT::FASTFEET) {
      jjObjects[i].age++;
        if (jjObjects[i].age > cSpellLifeTime)
      DestroySpell(i);
      continue;
    }
    }
  
  if (p.charCurr == CHAR::FROG && !playerIsFrog) {
    frogTime = 10*70;
    playerIsFrog = true;
  }
  
  if (p.charCurr != CHAR::FROG && playerIsFrog) {
    playerIsFrog = false;
  }
  
  if (frogTime == 0 && !frogTimer) {
    p.revertMorph(true);
    frogTimer = true;
  }
  
  if (frogTime != 0 && frogTimer) {
    frogTimer = false;
  }
}