Added game files
This commit is contained in:
parent
704637d45e
commit
340b9b6900
31 changed files with 5427 additions and 0 deletions
204
source/Entity.c
Normal file
204
source/Entity.c
Normal file
|
@ -0,0 +1,204 @@
|
|||
#include "Entity.h"
|
||||
|
||||
#define PI 3.141592654
|
||||
double gaussrand()
|
||||
{
|
||||
static double U, V;
|
||||
static int phase = 0;
|
||||
double Z;
|
||||
|
||||
if(phase == 0) {
|
||||
U = (rand() + 1.) / (RAND_MAX + 2.);
|
||||
V = rand() / (RAND_MAX + 1.);
|
||||
Z = sqrt(-2 * log(U)) * sin(2 * PI * V);
|
||||
} else
|
||||
Z = sqrt(-2 * log(U)) * cos(2 * PI * V);
|
||||
|
||||
phase = 1 - phase;
|
||||
|
||||
return Z;
|
||||
}
|
||||
|
||||
Entity newItemEntity(Item item, int x, int y, int level){
|
||||
Entity e;
|
||||
e.type = ENTITY_ITEM;
|
||||
e.level = level;
|
||||
e.entityItem.age = 0;
|
||||
e.entityItem.item = item;
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
e.xr = 3;
|
||||
e.yr = 3;
|
||||
e.canPass = false;
|
||||
|
||||
e.entityItem.xx = x;
|
||||
e.entityItem.yy = y;
|
||||
e.entityItem.zz = 2;
|
||||
e.entityItem.xa = gaussrand() * 0.1;
|
||||
e.entityItem.ya = gaussrand() * 0.1;
|
||||
e.entityItem.za = ((float)rand() / RAND_MAX) * 0.45 + 1;
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
void assignInventory(Entity* e){
|
||||
if(eManager.nextInv > 300) return;
|
||||
e->entityFurniture.inv = &eManager.invs[eManager.nextInv];
|
||||
eManager.nextInv++;
|
||||
}
|
||||
|
||||
Entity newFurnitureEntity(int itemID,Inventory * invPtr, int x, int y, int level){
|
||||
Entity e;
|
||||
e.type = ENTITY_FURNITURE;
|
||||
e.level = level;
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
e.xr = 3;
|
||||
e.yr = 3;
|
||||
e.entityFurniture.itemID = itemID;
|
||||
e.canPass = false;
|
||||
if(itemID == ITEM_LANTERN) e.entityFurniture.r = 8;
|
||||
else if(itemID == ITEM_CHEST){
|
||||
if(invPtr == NULL)assignInventory(&e);
|
||||
else e.entityFurniture.inv = invPtr;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
|
||||
Entity newZombieEntity(int lvl, int x, int y, int level){
|
||||
Entity e;
|
||||
e.type = ENTITY_ZOMBIE;
|
||||
e.level = level;
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
e.hurtTime = 0;
|
||||
e.xKnockback = 0;
|
||||
e.yKnockback = 0;
|
||||
e.zombie.lvl = lvl;
|
||||
e.zombie.health = lvl * lvl * 10;
|
||||
e.zombie.dir = 0;
|
||||
e.xr = 4;
|
||||
e.yr = 3;
|
||||
e.canPass = false;
|
||||
switch(lvl){
|
||||
case 2: e.zombie.color = 0xCC8282FF; break;
|
||||
case 3: e.zombie.color = 0xEFEFEFFF; break;
|
||||
case 4: e.zombie.color = 0x6262AAFF; break;
|
||||
default: e.zombie.color = 0x95DB95FF; break;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
Entity newSlimeEntity(int lvl, int x, int y, int level){
|
||||
Entity e;
|
||||
e.type = ENTITY_SLIME;
|
||||
e.level = level;
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
e.hurtTime = 0;
|
||||
e.xKnockback = 0;
|
||||
e.yKnockback = 0;
|
||||
e.slime.lvl = lvl;
|
||||
e.slime.xa = 0;
|
||||
e.slime.ya = 0;
|
||||
e.slime.dir = 0;
|
||||
e.slime.health = lvl * lvl * 5;
|
||||
e.xr = 4;
|
||||
e.yr = 3;
|
||||
e.canPass = false;
|
||||
switch(lvl){
|
||||
case 2: e.slime.color = 0xCC8282FF; break;
|
||||
case 3: e.slime.color = 0xEFEFEFFF; break;
|
||||
case 4: e.slime.color = 0x6262AAFF; break;
|
||||
default: e.slime.color = 0x95DB95FF; break;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
Entity newAirWizardEntity(int x, int y, int level){
|
||||
Entity e;
|
||||
e.type = ENTITY_AIRWIZARD;
|
||||
e.level = level;
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
e.hurtTime = 0;
|
||||
e.xKnockback = 0;
|
||||
e.yKnockback = 0;
|
||||
e.wizard.dir = 0;
|
||||
e.wizard.health = 2000;
|
||||
e.wizard.attackDelay = 0;
|
||||
e.wizard.attackTime = 0;
|
||||
e.wizard.attackType = 0;
|
||||
e.wizard.xa = 0;
|
||||
e.wizard.ya = 0;
|
||||
e.xr = 4;
|
||||
e.yr = 3;
|
||||
e.canPass = true;
|
||||
return e;
|
||||
}
|
||||
|
||||
Entity newSparkEntity(Entity* parent, float xa, float ya){
|
||||
Entity e;
|
||||
e.type = ENTITY_SPARK;
|
||||
e.spark.age = 0;
|
||||
e.spark.parent = parent;
|
||||
e.spark.xa = xa;
|
||||
e.spark.ya = ya;
|
||||
e.spark.xx = parent->x;
|
||||
e.spark.yy = parent->y;
|
||||
e.xr = 3;
|
||||
e.yr = 3;
|
||||
e.canPass = true;
|
||||
return e;
|
||||
}
|
||||
|
||||
Entity newTextParticleEntity(char * str, u32 color, int x, int y, int level){
|
||||
Entity e;
|
||||
e.type = ENTITY_TEXTPARTICLE;
|
||||
e.level = level;
|
||||
e.textParticle.color = color;
|
||||
e.textParticle.age = 0;
|
||||
e.textParticle.text = (char*)calloc(strlen(str),sizeof(char));
|
||||
strncpy(e.textParticle.text,str,strlen(str));
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
e.canPass = true;
|
||||
e.textParticle.xx = x;
|
||||
e.textParticle.yy = y;
|
||||
e.textParticle.zz = 2;
|
||||
e.textParticle.xa = gaussrand() * 0.3;
|
||||
e.textParticle.ya = gaussrand() * 0.2;
|
||||
e.textParticle.za = ((float)rand() / RAND_MAX) * 0.7 + 2;
|
||||
|
||||
return e;
|
||||
}
|
||||
Entity newSmashParticleEntity(int x, int y, int level){
|
||||
Entity e;
|
||||
e.type = ENTITY_SMASHPARTICLE;
|
||||
e.level = level;
|
||||
e.smashParticle.age = 0;
|
||||
e.x = x;
|
||||
e.y = y;
|
||||
e.canPass = true;
|
||||
playSound(snd_monsterHurt);
|
||||
return e;
|
||||
}
|
||||
|
||||
void addEntityToList(Entity e, EntityManager* em){
|
||||
e.slotNum = em->lastSlot[e.level];
|
||||
em->entities[e.level][em->lastSlot[e.level]] = e;
|
||||
++em->lastSlot[e.level];
|
||||
}
|
||||
|
||||
Entity nullEntity;
|
||||
void removeEntityFromList(Entity * e,int level,EntityManager* em){
|
||||
int i;
|
||||
if(em->entities[level][e->slotNum].type == ENTITY_TEXTPARTICLE) free(em->entities[level][e->slotNum].textParticle.text);
|
||||
for(i = e->slotNum; i < em->lastSlot[level];++i){
|
||||
em->entities[level][i] = em->entities[level][i + 1]; // Move the items down.
|
||||
em->entities[level][i].slotNum = i;
|
||||
}
|
||||
em->lastSlot[level]--;
|
||||
em->entities[level][em->lastSlot[level]] = nullEntity; // Make the last slot null.
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue