City by Dollar Studios
Felfüggesztve...
Smoke Ring Gun
A nevéből is kitalálható, hogy mi is ez, de azért egy rövid magyarázat: füstkarikákat tudsz vele lőni, amelyekkel megszédítheted a többieket.
Forráskód:
const int cRingLifeTime = 55;
void CreateRing(int objectID) {
int playerID = jjObjects[objectID].creator - 32768;
int ringID = jjAddObject(OBJECT::SMOKERING, jjPlayers[playerID].xPos+(jjPlayers[playerID].direction*48), jjPlayers[playerID].yPos, jjPlayers[playerID].playerID, CREATOR::PLAYER);
jjObjects[ringID].determineCurAnim(ANIM::CATERPIL, 6, true);
jjObjects[ringID].direction = jjPlayers[playerID].direction;
}
void DestroyRing(int ringID) {
int explosionID = jjAddObject(OBJECT::ELECTROBULLET, jjObjects[ringID].xPos, jjObjects[ringID].yPos, jjObjects[ringID].creator, CREATOR::PLAYER);
jjDeleteObject(ringID);
jjObjects[explosionID].determineCurAnim(ANIM::AMMO, 1, true);
jjObjects[explosionID].state = STATE::EXPLODE;
}
void onMain() {
p.ammo[9] = 3;
for(int i = 1; i < jjObjectCount; i++) {
if(jjObjects[i].isActive && jjObjects[i].eventID == OBJECT::SMOKERING) {
jjObjects[i].ySpeed = 0;
jjObjects[i].xPos = jjObjects[i].xPos+(jjObjects[i].direction*10);
if (jjObjects[i].counter > 10) jjDeleteObject(i);
}
}
for (int i = 0; i < jjObjectCount; i++)
if (jjObjects[i].isActive && jjObjects[i].creatorType == CREATOR::PLAYER) {
//Create smokering
if (jjObjects[i].eventID == OBJECT::ELECTROBULLET && jjObjects[i].state != STATE::EXPLODE) {
jjDeleteObject(i);
CreateRing(i);
continue;
}
//Destroy smokering
if (jjObjects[i].eventID == OBJECT::SMOKERING) {
jjObjects[i].age++;
if (jjObjects[i].age > cRingLifeTime)
DestroyRing(i);
continue;
}
}
}
Spell Gun
Ezzel a fegyverrel békává tudod a többieket változtatni 10 másodpercre.
Forráskód:
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;
}
}