]> code.bitgloo.com Git - clyne/gamedev.git/commitdiff
memory fixes
authorClyne Sullivan <tullivan99@gmail.com>
Tue, 1 Dec 2015 12:29:25 +0000 (07:29 -0500)
committerClyne Sullivan <tullivan99@gmail.com>
Tue, 1 Dec 2015 12:29:25 +0000 (07:29 -0500)
Changelog
include/entities.h
include/inventory.h
include/world.h
src/Quest.cpp
src/entities.cpp
src/gameplay.cpp
src/inventory.cpp
src/world.cpp

index c9c94d866ebe4ea5247014f31e6fe92efc25a847..c09d63a79cc10a6381a4c5135e5fa739729356d3 100644 (file)
--- a/Changelog
+++ b/Changelog
        - Converted all m/calloc/free calls to new/delete
        - fixed hardcoded string issues
        - improved inventory animation
+       - began writing songs for game soundtrack
+
+       ~ About 4280 lines of code + documentation written ( +7ish pages of story on gdoc)
index b9881ea202a709d6fd9dad5f243cab65f7943681..0bdadb7d21f61ee4c24c64218760e524f1938436 100644 (file)
@@ -38,56 +38,72 @@ class Entity{
 public:
        Inventory *inv;
 
-       float width;    //width and height of the player
+       /*
+        *      Movement variables
+       */
+
+       vec2 loc;
+       vec2 vel;
+       
+       float width;
        float height;
-       float speed;    //speed of the play
+       
+       float speed;    // A speed factor for X movement
+
+       /*
+        *      Movement flags
+       */
+
+       bool near;                              // Causes name to display
+       bool canMove;                   // Enables movement
+       bool right,left;                // Direction faced by Entity
+       bool alive;
+       unsigned char ground;   // Shows how the Entity is grounded (if it is)
+
+       /*
+        *      Health variables
+       */
 
        float health;
        float maxHealth;
 
-       int subtype;
-       _TYPE type;
-                       //example:
-                       //type  1(NPC)
-                       //              |(subtype)
-                       //              |->  0 Base NPC
-                       //              |->  1 Merchant
+       /*
+        *      Identification variables
+       */
 
-       vec2 loc; //location and velocity of the entity
-       vec2 vel;
-
-       bool near;
-       bool right,left, canMove; //movement variables
-       bool alive;                               //the flag for whether or not the entity is alive
-       unsigned char ground;     //variable for testing what ground the entity is on to apply certain traits
+       _TYPE type;
+       int       subtype;
 
-       charname;
-       GENDER gender;
-       //GLuint texture[3];      //TODO: ADD TEXTURES
-       Texturectex;
+       char   *name;
+       GENDER  gender;
+       
+       Texturec *tex;
 
 
-       void spawn(float, float);
        void draw(void);
+       void spawn(float, float);
+       
+       int ticksToUse;                         // Used by wander()
+       
        virtual void wander(int){}
-       void getName();
        virtual void interact(){}
-       int ticksToUse; //The variable for deciding how long an entity should do a certain task
-private:
 };
 
 class Player : public Entity {
 public:
        QuestHandler qh;
+       bool light = false;
+       
        Player();
        void interact();
-       bool light = false;
 };
 
 class NPC : public Entity{
 public:
        std::vector<int (*)(NPC *)>aiFunc;
+       
        NPC();
+       
        void addAIFunc(int (*func)(NPC *),bool preload);
        void interact();
        void wander(int);
@@ -97,6 +113,7 @@ class Structures : public Entity{
 public:
        void *inWorld;
        void *inside;
+       
        Structures();
        unsigned int spawn(_TYPE, float, float);
 };
@@ -105,22 +122,25 @@ class Mob : public Entity{
 public:
        double init_y;
        void (*hey)();
+       
        Mob(int);
        Mob(int,unsigned int);
        void wander(int);
 };
 
 class Object : public Entity{
+private:
+       int identifier;
 public:
+       char *pickupDialog;
+       bool questObject = false;
+       
        Object(ITEM_ID id, bool qo, const char *pd);
+       
        void interact(void);
-       bool questObject = false;
-       char *pickupDialog;
        std::thread runInteract() {
           return std::thread([=] { interact(); });
     }
-private:
-       int identifier;
 };
 #endif // ENTITIES_H
 
index a9a4bcb46be597b4bdcd481294884ecf16282730..611a6d77a3398ee7ed3b68a13cfedc3f9abd2224 100644 (file)
@@ -67,14 +67,13 @@ private:
        unsigned int size;              // Size of 'item' array
        item_t *inv;
        int os = 0;
-       //struct item_t *item;  // An array of the items contained in this inventory.
 public:
        unsigned int sel;
        bool invOpen = false;
        bool invOpening = false;
 
        Inventory(unsigned int s);      // Creates an inventory of size 's'
-       ~Inventory(void);                       // Free's 'item'
+       ~Inventory(void);                       // Free's allocated memory
        
        int addItem(ITEM_ID id,unsigned char count);    // Add 'count' items with an id of 'id' to the inventory
        int takeItem(ITEM_ID id,unsigned char count);   // Take 'count' items with an id of 'id' from the inventory
index a2414e66fd8dea38c3c2d70322ed27943825ca58..4e4c28d18d0f1c0460700a49b3de4780a403b656 100644 (file)
@@ -205,6 +205,7 @@ private:
        World   *exit;
 public:
        Arena(World *leave,Player *p);
+       ~Arena(void);
        World *exitArena(Player *p);
 };
 
index bfa89668e2e18e901bc7e712a836f3649acdff68..4e8522ddf985f5fe6abdd3ddc26cef415b473297 100644 (file)
@@ -7,25 +7,22 @@
 #define END            }),\r
 \r
 const Quest QuestList[TOTAL_QUESTS]={\r
-//     Quest("Test","A test quest",(struct item_t){1,TEST_ITEM}),\r
-\r
 // Get quest list\r
 #include "../config/quest_list.txt"\r
-\r
 };\r
 \r
 \r
 Quest::Quest(const char *t,const char *d,struct item_t r){\r
-       title = new char[strlen(t)+1];  //(char *)calloc(safe_strlen(t),sizeof(char));\r
-       desc = new char[strlen(d)+1];           //(char *)calloc(safe_strlen(d),sizeof(char));\r
+       title = new char[strlen(t)+1];\r
+       desc = new char[strlen(d)+1];\r
        strcpy(title,t);\r
        strcpy(desc,d);\r
        memcpy(&reward,&r,sizeof(struct item_t));\r
 }\r
 \r
 Quest::~Quest(){\r
-       delete[] title; //free(title);\r
-       delete[] desc;  //free(desc);\r
+       delete[] title;\r
+       delete[] desc;\r
        memset(&reward,0,sizeof(struct item_t));\r
 }\r
 \r
index 4e582c986194ffc3a7488f26a2f365a76618ffe2..f9723cfdd24c98a5ec05414d8725a99dd3cfc195 100644 (file)
@@ -10,6 +10,39 @@ extern Player *player;
 
 extern const char *itemName;
 
+void getRandomName(Entity *e){
+       int tempNum,max=0;
+       char buf,*bufs;
+       
+       rewind(names);
+       
+       bufs = new char[16];    //(char *)malloc(16);
+       
+       for(;!feof(names);max++){
+               fgets(bufs,16,(FILE*)names);
+       }
+       
+       tempNum = rand() % max;
+       rewind(names);
+       
+       for(int i=0;i<tempNum;i++){
+               fgets(bufs,16,(FILE*)names);
+       }
+       
+       switch(fgetc(names)){
+       case 'm': e->gender = MALE;  break;
+       case 'f': e->gender = FEMALE;break;
+       default : break;
+       }
+       
+       if((fgets(bufs,16,(FILE*)names)) != NULL){
+               bufs[strlen(bufs)-1] = '\0';
+               strcpy(e->name,bufs);
+       }
+       
+       delete[] bufs;
+}
+
 void Entity::spawn(float x, float y){  //spawns the entity you pass to it based off of coords and global entity settings
        loc.x = x;
        loc.y = y;
@@ -33,8 +66,8 @@ void Entity::spawn(float x, float y){ //spawns the entity you pass to it based o
                }
        }
        
-       name = new char[16];    //(char*)malloc(16);
-       getName();
+       name = new char[16];
+       getRandomName(this);
 }
 
 Player::Player(){ //sets all of the player specific traits on object creation
@@ -208,38 +241,6 @@ NOPE:
        }
 }
 
-void Entity::getName(){
-       rewind(names);
-       char buf,*bufs = new char[16];  //(char *)malloc(16);
-       int tempNum,max = 0;
-       for(;!feof(names);max++){
-               fgets(bufs,16,(FILE*)names);
-       }
-       tempNum = rand()%max;
-       rewind(names);
-       for(int i=0;i<tempNum;i++){
-               fgets(bufs,16,(FILE*)names);
-       }
-       switch(fgetc(names)){
-       case 'm':
-               gender = MALE;
-               //std::puts("Male");
-               break;
-       case 'f':
-               gender = FEMALE;
-               //std::puts("Female");
-               break;
-       default:
-               break;
-       }
-       if((fgets(bufs,16,(FILE*)names)) != NULL){
-               //std::puts(bufs);
-               bufs[strlen(bufs)-1] = '\0';
-               strcpy(name,bufs);
-       }
-       delete[] bufs;  //free(bufs);
-}
-
 void Player::interact(){ //the function that will cause the player to search for things to interact with
        
 }
index 2fd7424d8c5fc5ae2844f00b940c67844ce5e0aa..eadd6681cb05af5d1bf44e0975f5e34dc938d8ba 100644 (file)
@@ -91,6 +91,9 @@ void CUTSCENEEE(void){
 float playerSpawnHillFunc(float x){
        return (float)(pow(2,(-x+200)/5) + 80);
 }
+
+void destroyEverything(void);
+
 void initEverything(void){
        unsigned int i;
        
@@ -153,9 +156,11 @@ void initEverything(void){
        currentWorld->addObject(SWORD_WOOD, 650,200);
        currentWorld->addObject(FLASHLIGHT, true, "This looks important, do you want to pick it up?",700,200);
        */
-       /*
-        *      Link all the entities that were just created to the initial world, and setup a test AI function. 
-       */
        
        currentWorld->npc[0]->addAIFunc(giveTestQuest,false);
+       atexit(destroyEverything);
+}
+
+void destroyEverything(void){
+       //delete currentWorld;
 }
index cd01c11e628553cd3334c59009760059c03d1a2a..32929df603a3907efa8244f5b926dfa1caea0605 100644 (file)
@@ -25,8 +25,8 @@ Item::Item(ITEM_ID i, const char *n, ITEM_TYPE t, float w, float h, int m, const
        maxStackSize = m;
        count = 0;
 
-       name            = new char[strlen(n)+1];        //(char*)calloc(strlen(n ),sizeof(char));
-       textureLoc      = new char[strlen(tl)+1];       //(char*)calloc(strlen(tl),sizeof(char));
+       name            = new char[strlen(n)+1];
+       textureLoc      = new char[strlen(tl)+1];
 
        strcpy(name,n);
        strcpy(textureLoc,tl);
@@ -37,14 +37,13 @@ Item::Item(ITEM_ID i, const char *n, ITEM_TYPE t, float w, float h, int m, const
 Inventory::Inventory(unsigned int s){
        sel=0;
        size=s;
-       inv = new struct item_t[size];  //(struct item_t *)calloc(size,sizeof(struct item_t));
+       inv = new struct item_t[size];
        memset(inv,0,size*sizeof(struct item_t));
        tossd=false;
 }
 
 Inventory::~Inventory(void){
        delete[] inv;
-       //free(item);
 }
 
 void Inventory::setSelection(unsigned int s){
index c977c7fdadf04225cbde2f677592e2be850d05f1..36f0f696904334be825fb361e187f77254546a12 100644 (file)
@@ -71,6 +71,18 @@ World::World(void){
        memset(star,0,100*sizeof(vec2));
 }
 
+World::~World(void){
+       delete bgTex;
+       delete[] star;
+       delete[] line;
+       
+       delete &mob;
+       delete &npc;
+       delete &build;
+       delete &object;
+       delete &entity;
+}
+
 void World::generate(unsigned int width){      // Generates the world and sets all variables contained in the World class.
        unsigned int i;
        float inc;
@@ -196,10 +208,6 @@ void World::generateFunc(unsigned int width,float(*func)(float)){
        }
 }
 
-World::~World(void){
-       delete[] line;
-}
-
 void World::update(Player *p,unsigned int delta){
        p->loc.y+= p->vel.y                      *delta;
        p->loc.x+=(p->vel.x*p->speed)*delta;
@@ -836,7 +844,15 @@ IndoorWorld::IndoorWorld(void){
 }
 
 IndoorWorld::~IndoorWorld(void){
-       delete[] line;  //free(line);
+       delete bgTex;
+       delete[] star;
+       delete[] line;
+       
+       delete &mob;
+       delete &npc;
+       delete &build;
+       delete &object;
+       delete &entity;
 }
 
 void IndoorWorld::generate(unsigned int width){                // Generates a flat area of width 'width'
@@ -897,6 +913,18 @@ Arena::Arena(World *leave,Player *p){
        pxy = p->loc;
 }
 
+Arena::~Arena(void){
+       delete bgTex;
+       delete[] star;
+       delete[] line;
+       
+       delete &mob;
+       delete &npc;
+       delete &build;
+       delete &object;
+       delete &entity;
+}
+
 World *Arena::exitArena(Player *p){
        npc[0]->loc.x = door.x;
        npc[0]->loc.y = door.y;