]> code.bitgloo.com Git - clyne/gamedev.git/commitdiff
first areas plotted
authorClyne Sullivan <tullivan99@gmail.com>
Fri, 11 Dec 2015 13:38:38 +0000 (08:38 -0500)
committerClyne Sullivan <tullivan99@gmail.com>
Fri, 11 Dec 2015 13:38:38 +0000 (08:38 -0500)
15 files changed:
Changelog
Goals.txt
assets/sounds/longSwing.mp3 [deleted file]
assets/sounds/sanic.wav [new file with mode: 0644]
config/items.h
include/Texture.h
include/common.h
include/entities.h
include/ui.h
include/world.h
main.cpp
src/entities.cpp
src/gameplay.cpp
src/ui.cpp
src/world.cpp

index fbe14bc4ef7c290936da84115f61e99d5465e813..44e0bfc2aeee45592751ae945a80f2e67b544fac 100644 (file)
--- a/Changelog
+++ b/Changelog
        - added border to dialogBox
        - fix entity movement handling; npcs stop when you talk to them
        - added sword animation?
+
+12/9/2015,
+12/10/2015:
+===========
+
+       - added sound effects
+       - fixed disappearing building
+       - began actually plotting areas
+       - fixed layer switching-ish
+       - added passive dialogs
+       - began working on particles stuffses
+       - improved village spawning
+
+12/11/2015:
+===========
+
+       - plotted out a tutorial-ish area in game
+       - imrpoved BGM handling
+       - continued work on particles, made a fountain
+       - added sanic
index 208c7e585f5ed4ae7353237493157bfebe35f1f3..140cdd37f190a01e733ccfb225345812583df848 100644 (file)
--- a/Goals.txt
+++ b/Goals.txt
@@ -27,7 +27,7 @@ Summary:
 idea of a parallaxed background was applied, with up to four layers of tiled background material.
 Combinations of background layers were sorted and added to the World class with a World::setBackground()
 function. The inventory was created, with an animated inventory view based off of the player finished
-by the end of the month.
+by the end of the month. ...
 
 End of December:
 ================
diff --git a/assets/sounds/longSwing.mp3 b/assets/sounds/longSwing.mp3
deleted file mode 100644 (file)
index cb6dced..0000000
Binary files a/assets/sounds/longSwing.mp3 and /dev/null differ
diff --git a/assets/sounds/sanic.wav b/assets/sounds/sanic.wav
new file mode 100644 (file)
index 0000000..18708a9
Binary files /dev/null and b/assets/sounds/sanic.wav differ
index 1bd9111edc9db036028144a054f8e9d3467ef724..9012ff69c13260de3bfd9f1c87c59727137b3f17 100644 (file)
@@ -11,8 +11,8 @@ ID DEBUG_ITEM
 ID TEST_ITEM   
        NAME "Dank MayMay" 
        TYPE TOOL 
-       WIDTH HLINE*1
-       HEIGHT HLINE*1 
+       WIDTH HLINE*10
+       HEIGHT HLINE*10 
        STACKSIZE 420 
        TEX "assets/items/ITEM_TEST.png"
        ENI
index bcd95afa079f0e8eb2240c2acc8fa9be2a428f4a..85225d841cbd39aae85406d3f652ebc8ebe67823 100644 (file)
@@ -52,7 +52,7 @@ public:
         * Contains an array of the GLuints returned from Texture::loadTexture().
         */
 
-       GLuint *image;
+       GLuint *image = NULL;
        
        /**
         * Populates the image array from a list of strings, with each string as a
index f8bd93554f3cb781f3d0bb3fd569ab059428b5b8..095b3e30f4c33e68326e05986f6a3c884bcedee8 100644 (file)
@@ -64,7 +64,7 @@ typedef struct {
  * The desired width of the game window.
  */
 
-#define SCREEN_WIDTH   1280
+#define SCREEN_WIDTH   1024
 
 /**
  * The desired height of the game window.
index 64a251ae3f1ed276ef118bf99b2274d140d8aa75..dd3adabb695f8d60fd49e54276b0feff1fff4221 100644 (file)
@@ -16,7 +16,7 @@
 
 enum _TYPE { //these are the main types of entities
        OBJECTT = -2,
-       STRUCTURET = -1,
+       STRUCTURET,
        PLAYERT,
        NPCT,
        MOBT
index 97e4bbf37d7c604ebad23623bd46935a9597afef..2fe3b0aa1cef58cf04b691cdd77204ac64e53e2a 100644 (file)
@@ -60,7 +60,7 @@ namespace ui {
         *      limited until a right click is given, closing the box.
        */
        
-       void dialogBox(const char *name,const char *opt,const char *text,...);
+       void dialogBox(const char *name,const char *opt,bool passive,const char *text,...);
        void waitForDialog(void);
        
        /*
index ccf93a840baabc64ebb57794993fb7b511b926b7..1e78cd0d9b50253d2021db47645e8c5526eaa812 100644 (file)
 
 #define GEN_INC 10
 
+
+#define GEN_MIN  80
+#define GEN_MAX  110
+
+
 /**
  * Defines how many game ticks it takes for a day to elapse.
  */
@@ -194,8 +199,7 @@ public:
        */
        
        void setBGM(const char *path);
-       void bgmPlay(void);
-       void bgmStop(void);
+       void bgmPlay(World *prev);
        
        /*
         *      Looks for the furthest back layer in this world and adds a new layer of width `width` behind it.
index b28a8da31c3475536fe2a1b08b2d2d986142371a..4e451895f6d077c8f6e5efbfc23e48e9364e3735 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -256,6 +256,7 @@ int main(/*int argc, char *argv[]*/){
                std::cout << "SDL_mixer could not initialize! Error: " << Mix_GetError() << std::endl;
                return -1;
        }
+       Mix_AllocateChannels(8);
 
        // Run Mix_Quit when main returns
        atexit(Mix_CloseAudio);
@@ -492,8 +493,7 @@ void mainLoop(void){
        ui::handleEvents();
        
        if(prev != currentWorld){
-               prev->bgmStop();
-               currentWorld->bgmPlay();
+               currentWorld->bgmPlay(prev);
        }
        
        if(prevPrevTime + MSEC_PER_TICK <= currentTime){
index 1c36ca76f34459b35a510775417d87c63447186f..5c00cc7e98801ee15dc49af02271663f57ef296d 100644 (file)
@@ -148,7 +148,7 @@ Mob::Mob(int sub){
                height = HLINE * 8;
                tex = new Texturec(1, "assets/robin.png");
        case MS_TRIGGER:
-               width = HLINE * 8;
+               width = HLINE * 20;
                height = 2000;
                tex = new Texturec(0);
                break;
@@ -337,7 +337,7 @@ void NPC::interact(){ //have the npc's interact back to the player
                        if(aiFunc.size())aiFunc.erase(aiFunc.begin());
                }
        }else{
-               ui::dialogBox(name,NULL,randomDialog[randDialog]);
+               ui::dialogBox(name,NULL,false,randomDialog[randDialog]);
        }
        ui::waitForDialog();
        canMove=true;
@@ -345,7 +345,7 @@ void NPC::interact(){ //have the npc's interact back to the player
 
 void Object::interact(void){
        if(questObject && alive){
-               ui::dialogBox(player->name,":Yes:No",pickupDialog);             
+               ui::dialogBox(player->name,":Yes:No",false,pickupDialog);               
                ui::waitForDialog();
                if(ui::dialogOptChosen == 1){
                        player->inv->addItem((ITEM_ID)(identifier), (char)1);
@@ -434,8 +434,6 @@ void Mob::wander(int timeRun){
        case MS_TRIGGER:
                if(player->loc.x + player->width / 2 > loc.x             &&
                   player->loc.x + player->width / 2 < loc.x + width ){
-                       if(player->left)player->loc.x = loc.x + width;
-                       else if(player->right) player->loc.x = loc.x - player->width;
                        hey(this);
                }
                break;
index b9aa328a6d9e5f7608f2672291e6e4f3525babbb..74414d705a073c54ad93cd538137f68bcb4eacbd 100644 (file)
 #include <common.h>
+#include <entities.h>
 #include <world.h>
 #include <ui.h>
-#include <entities.h>
 
 extern World   *currentWorld;
 extern Player  *player;
 
-int compTestQuest(NPC *speaker){
-       ui::dialogBox(speaker->name,NULL,"Ooo, that's a nice quest you got there. Lemme finish that for you ;).");
-       player->qh.finish("Test",player);
-       return 0;
+/*
+ *     int (npc*)
+ * 
+ *     dialog
+ *     wait...
+ * 
+ *     switch optchosen
+ * 
+ *     qh.assign
+ *     addAIFunc?
+ * 
+ *     return 1 = repeat
+ */
+void story(Mob *callee){
+       player->vel.x = 0;
+       Mix_FadeOutMusic(0);
+       ui::importantText("It was a dark and stormy night...");
+       ui::waitForDialog();
+       callee->alive = false;
 }
 
-int giveTestQuest(NPC *speaker){
-       ui::dialogBox(speaker->name,":Yes:No","Here, have a quest!");
-       ui::waitForDialog();
-       
-       if(ui::dialogOptChosen == 1){
-               
-               ui::dialogBox(speaker->name,"","Have a good day! :)");
-               ui::waitForDialog();
-
-               player->qh.assign("Test");
-               currentWorld->npc[1]->addAIFunc(compTestQuest,true);
-               
-       }else return 1;
-       
-       return 0;
+float gen_worldSpawnHill1(float x){
+       return (float)(pow(2,(-x+200)/5) + GEN_MIN);
 }
 
-void CUTSCENEEE(Mob *callee){
-       player->vel.x = 0;
-       
-       ui::dialogBox(player->name,":K then","No way I\'m gettin\' up this hill.");
-       ui::waitForDialog();
+float gen_worldSpawnHill3(float x){
+       float tmp = 60*atan(-(x/30-20))+GEN_MIN*2;
+       return tmp>GEN_MIN?tmp:GEN_MIN;
+}
 
-       player->right = true;
-       player->left  = false;
-       player->loc.x += HLINE * 5;
-       
+/*
+ *     Thing-thangs
+ */
+
+void worldSpawnHill1_hillBlock(Mob *callee){
+       player->vel.x = 0;
+       player->loc.x = callee->loc.x + callee->width;
+       ui::dialogBox(player->name,NULL,false,"This hill seems to steep to climb up...");
        callee->alive = true;
 }
 
-void CUTSCENEEE2(Mob *callee){
-       player->vel.x = 0;
-       ui::dialogBox(player->name,":Yeah.",
-       "What the fuck is this dead end supposed to mean, and why this place smell like soap.");
-       ui::waitForDialog();
+void worldSpawnHill2_infoSprint(Mob *callee){
+       ui::dialogBox("B-) ",NULL,true,"Press \'Shift\' to run!");
        callee->alive = false;
 }
 
-void story(Mob *callee){
-       player->vel.x = 0;
-       Mix_FadeOutMusic(0);
-       ui::importantText("It was a dark and stormy night...");
-       ui::waitForDialog();
+void worldSpawnHill3_itemGet(Mob *callee){
+       ui::dialogBox("B-) ",NULL,true,"Right click to pick up items!");
        callee->alive = false;
 }
 
-float playerSpawnHillFunc(float x){
-       return (float)(pow(2,(-x+200)/5) + 80);
+void worldSpawnHill3_itemSee(Mob *callee){
+       ui::dialogBox("B-) ",NULL,true,"Press \'e\' to open your inventory!");
+       callee->alive = false;
 }
 
-static World *test;
-static World *playerSpawnHill;
-static IndoorWorld *iw;
+void worldSpawnHill3_leave(Mob *callee){
+       ui::dialogBox("B-) ",NULL,true,"Now jump in this hole, and let your journey begin :)");
+       callee->alive = false;
+}
 
-void destroyEverything(void);
+/*
+ *     new world 
+ *     gen
+ *     setbackground
+ *     setbgm
+ *     add...
+ * 
+ */
+
+/*
+ *     World definitions
+ */
 
+static World *worldSpawnHill1;
+static World *worldSpawnHill2;
+static World *worldSpawnHill3;
+
+/*
+ *     initEverything() start
+ */
+
+void destroyEverything(void);
 void initEverything(void){
-       //FILE *load;
-       
-       /*
-        *      World creation:
-       */
-       
-       test=new World();
-       
-       test->generate(SCREEN_WIDTH*2);
-       test->setBackground(BG_FOREST);
-       test->setBGM("assets/music/embark.wav");
-       
-       test->addHole(100,150);
-       test->addLayer(400);
-       
-       playerSpawnHill=new World();
-       playerSpawnHill->setBackground(BG_FOREST);
-       playerSpawnHill->setBGM("assets/music/embark.wav");
-       
-       /*if((load=fopen("world.dat","rb"))){
-               playerSpawnHill->load(load);
-               fclose(load);
-       }else{*/
-               playerSpawnHill->generateFunc(1280,playerSpawnHillFunc);
-       //}
-
-       /*
-        *      Setup the current world, making the player initially spawn in `test`.
-       */
-       
-       currentWorld=playerSpawnHill;
-       
-       playerSpawnHill->toRight=test;
-       test->toLeft=playerSpawnHill;
-       
-       /*
-        *      Create the player.
-       */
-       
-       player=new Player();
-       player->spawn(-1000,200);
+
+       worldSpawnHill1 = new World();
+       worldSpawnHill1->generateFunc(400,gen_worldSpawnHill1);
+       worldSpawnHill1->setBackground(BG_FOREST);
+       worldSpawnHill1->setBGM("assets/music/embark.wav");
+       worldSpawnHill1->addMob(MS_TRIGGER,0,0,worldSpawnHill1_hillBlock);
+
+       worldSpawnHill2 = new World();
+       worldSpawnHill2->generate(700);
+       worldSpawnHill2->setBackground(BG_FOREST);
+       worldSpawnHill2->setBGM("assets/music/embark.wav");
+       worldSpawnHill2->addMob(MS_TRIGGER,-400,0,worldSpawnHill2_infoSprint);
        
-       /*
-        *      Create a structure (this will create villagers when spawned).
-       */
+       worldSpawnHill3 = new World();
+       worldSpawnHill3->generateFunc(1000,gen_worldSpawnHill3);
+       worldSpawnHill3->setBackground(BG_FOREST);
+       worldSpawnHill3->setBGM("assets/music/embark.wav");
+       worldSpawnHill3->addMob(MS_TRIGGER,-500,0,worldSpawnHill3_itemGet);
+       worldSpawnHill3->addMob(MS_TRIGGER,0,0,worldSpawnHill3_itemSee);
+       worldSpawnHill3->addObject(TEST_ITEM,false,"",-200,300);
+       worldSpawnHill3->addMob(MS_TRIGGER,400,0,worldSpawnHill3_leave);
+       worldSpawnHill3->addHole(800,1000);
        
-       iw=new IndoorWorld();
-       iw->setBackground(BG_WOODHOUSE);
-       iw->setBGM(NULL);
-       iw->generate(200);
-       iw->addMob(MS_TRIGGER,0,0,CUTSCENEEE2);
+       worldSpawnHill1->toRight = worldSpawnHill2;
+       worldSpawnHill2->toLeft = worldSpawnHill1;
        
-       /*
-        *      Spawn some entities.
-       */
-
-       playerSpawnHill->addMob(MS_TRIGGER,player->loc.x,0,story);
-
-       playerSpawnHill->addStructure(STRUCTURET,(rand()%120*HLINE),100,test,iw);
-       playerSpawnHill->addMob(MS_TRIGGER,-1300,0,CUTSCENEEE);
+       worldSpawnHill2->toRight = worldSpawnHill3;
+       worldSpawnHill3->toLeft = worldSpawnHill2;
        
-       playerSpawnHill->addObject(SWORD_WOOD, false, "", 480,200);
-       playerSpawnHill->addObject(FLASHLIGHT, false, "", 500,200);
-       playerSpawnHill->addObject(PLAYER_BAG, false, "", 520,200);
-       playerSpawnHill->addObject(TEST_ITEM, false, "", 540,200);
+       currentWorld = worldSpawnHill1;
        
-       test->addMob(MS_RABBIT,200,100);
-       test->addMob(MS_BIRD,-500,500);
+       player = new Player();
+       player->spawn(200,100);
        
-       playerSpawnHill->npc[0]->addAIFunc(giveTestQuest,false);
+       currentWorld->bgmPlay(NULL);
        
-       currentWorld->bgmPlay();
        atexit(destroyEverything);
 }
 
@@ -148,21 +134,8 @@ extern std::vector<int (*)(NPC *)> AIpreload;
 extern std::vector<NPC *> AIpreaddr;
 
 void destroyEverything(void){
-       //FILE *save;
-       
-       /*save = fopen("world.dat","wb");
-       playerSpawnHill->save(save);
-       fclose(save);*/
-       
-       delete test;
-       delete playerSpawnHill;
-       
-       while(!AIpreload.empty()){
+       while(!AIpreload.empty())
                AIpreload.pop_back();
-       }
-       while(!AIpreaddr.empty()){
+       while(!AIpreaddr.empty())
                AIpreaddr.pop_back();
-       }
-       
-       //delete iw;    // segfaults
 }
index ff5a84aaf24732cb9479b6c7a4128e06785a0907..26b30c45cdbac02bd501b3a806e929a27364bfe1 100644 (file)
@@ -48,6 +48,7 @@ static char dialogBoxText[512];
 static char *dialogOptText[4];
 static float dialogOptLoc[4][3];
 static unsigned char dialogOptCount = 0;
+static bool dialogPassive = false;
 static bool typeOutDone = true;
 
 Mix_Chunk *dialogClick;
@@ -346,7 +347,8 @@ namespace ui {
                        
                        if(linc<size)
                                linc++;
-                       else typeOutDone = true;
+                       else
+                               typeOutDone = true;
                }
                
                return ret;             //      The buffered string.
@@ -385,11 +387,13 @@ namespace ui {
                
                return width;
        }
-       void dialogBox(const char *name,const char *opt,const char *text,...){
+       void dialogBox(const char *name,const char *opt,bool passive,const char *text,...){
                va_list dialogArgs;
                unsigned int len;
                char *sopt,*soptbuf;
                
+               dialogPassive = passive;
+               
                /*
                 *      Set up the text buffer.
                */
@@ -422,7 +426,7 @@ namespace ui {
                };
 
                dialogOptChosen=0;
-               dialogOptCount=0;
+               memset(&dialogOptLoc,0,sizeof(float)*12);
                
                if(opt){
                        
@@ -632,7 +636,8 @@ DONE:
                                                player->ground=false;
                                        }
                                        break;
-                               }else if(!dialogBoxExists){//&&!fadeEnable){
+                               }else if(!dialogBoxExists || dialogPassive){
+                                       tmp = currentWorld;
                                        switch(SDL_KEY){
                                        case SDLK_a:
                                                player->vel.x=-.15;
@@ -641,6 +646,8 @@ DONE:
                                                left = true;
                                                right = false;
                                                currentWorld=currentWorld->goWorldLeft(player);
+                                               if(tmp!=currentWorld)
+                                                       dialogBoxExists = false;
                                                break;
                                        case SDLK_d:
                                                player->vel.x=.15;
@@ -649,6 +656,8 @@ DONE:
                                                left = false;
                                                right = true;
                                                currentWorld=currentWorld->goWorldRight(player);
+                                               if(tmp!=currentWorld)
+                                                       dialogBoxExists = false;
                                                break;
                                        case SDLK_s:
                                                if(player->ground == 2){
@@ -662,7 +671,6 @@ DONE:
                                                else currentWorld=currentWorld->goInsideStructure(player);
                                                break;
                                        case SDLK_i:
-                                               tmp=currentWorld;
                                                currentWorld=currentWorld->goWorldBack(player); // Go back a layer if possible  
                                                if(tmp!=currentWorld){
                                                        currentWorld->detect(player);
@@ -672,7 +680,6 @@ DONE:
                                                }
                                                break;
                                        case SDLK_k:
-                                               tmp=currentWorld;
                                                currentWorld=currentWorld->goWorldFront(player);        // Go forward a layer if possible
                                                if(tmp!=currentWorld){
                                                        currentWorld->behind->detect(player);
@@ -682,7 +689,13 @@ DONE:
                                                }
                                                break;
                                        case SDLK_LSHIFT:
-                                               player->speed = debug ? 4.0f : 3.0f;
+                                               if(debug){
+                                                       Mix_Chunk *sanic;
+                                                       sanic = Mix_LoadWAV("assets/sounds/sanic.wav");
+                                                       Mix_PlayChannel(1,sanic,-1);
+                                                       player->speed = 4.0f;
+                                               }else
+                                                       player->speed = 2.0f;
                                                break;
                                        case SDLK_LCTRL:
                                                player->speed = .5;
@@ -720,6 +733,9 @@ DONE:
                                        right = false;
                                        break;
                                case SDLK_LSHIFT:
+                                       if(player->speed == 4){
+                                               Mix_FadeOutChannel(1,2000);
+                                       }
                                        player->speed = 1;
                                        break;
                                case SDLK_LCTRL:
index 3fdfa7fb7b859f8bdc3279a0c29d3a3c05fec5cf..3f35e21222ebd595d15f8291be2e9de7d347f630 100644 (file)
@@ -3,8 +3,6 @@
 
 #define getWidth(w) ((w->lineCount-GEN_INC)*HLINE)     // Calculates the width of world 'w'
 
-#define GEN_MIN  80
-#define GEN_MAX  110
 #define GEN_INIT 60
 
 #define GRASS_HEIGHT 4                         // Defines how long the grass layer of a line should be in multiples of HLINE.
@@ -112,9 +110,13 @@ void World::deleteEntities(void){
 }
 
 World::~World(void){
-       if(behind)
+       if(behind != NULL)
                delete behind;
        
+       if(bgmObj)
+               Mix_FreeMusic(bgmObj);
+       if(bgm)
+               delete[] bgm;
        delete bgTex;
        delete[] star;
        delete[] line;
@@ -314,24 +316,13 @@ void World::setBGM(const char *path){
        }
 }
 
-static Mix_Music *bgmC;
-
-void World::bgmPlay(void){
-       if(bgmObj && bgmC != bgmObj){
+void World::bgmPlay(World *prev){      
+       if(!prev || strcmp(bgm,prev->bgm)){
                Mix_VolumeMusic(50);
                Mix_PlayMusic(bgmObj,-1);       // Loop infinitely
-               bgmC = bgmObj;
-       }else{
+       }/*else{
                Mix_FadeOutMusic(800);
-       }
-}
-
-void World::bgmStop(void){
-       if(bgmObj){
-               if(bgmC != bgmObj){
-                       Mix_FreeMusic(bgmObj);
-               }
-       }
+       }*/
 }
 
 int worldShade = 0;
@@ -520,10 +511,7 @@ LOOP2:
        */
        
        for(auto &b : current->build){
-               //b->loc.y+=(yoff-DRAW_Y_OFFSET);
                b->draw();
-               //b->loc.y-=(yoff-DRAW_Y_OFFSET);
-               std::cout<<b->loc.x<<" "<<b->loc.y<<std::endl;
        }
        
        /*
@@ -779,29 +767,33 @@ void World::singleDetect(Entity *e){
                         *      Check that the entity isn't trying to run through a wall.
                        */
                        
-                       if(e->loc.y + e->height > line[i-(int)e->width/2/HLINE].y &&
-                          e->loc.y + e->height > line[i+(int)e->width/2/HLINE].y ){
+                       //if(e->loc.y + e->height > line[i-(int)e->width/2/HLINE].y &&
+                        //  e->loc.y + e->height > line[i+(int)e->width/2/HLINE].y ){
                        
                                e->loc.y=line[i].y - .001 * deltaTime;
                                e->ground=true;
                                e->vel.y=0;
                                
-                       }else{
+                       //}else{
                                
                                /*
                                 *      Push the entity out of the wall if it's trying to go through it.
                                */
                                
-                               do{
+                               /*do{
                                        e->loc.x+=.001 * e->vel.x>0?-1:1;
                                        
                                        l=(e->loc.x - e->width / 2 - x_start) / HLINE;
-                                       if(l < 0){ e->alive = false; return; }
+                                       if(l < 0){
+                                               std::cout<<"push kill lol "<<e->type<<std::endl;
+                                               e->alive = false; return; }
                                        i = l;
-                                       if(i > lineCount-1){ e->alive = false; return; }
+                                       if(i > lineCount-1){
+                                               std::cout<<"push kill lol "<<e->type<<std::endl;
+                                               e->alive = false; return; }
                                }while(line[i].y>e->loc.y+ e->height);
                                
-                       }
+                       }*/
                
                /*
                 *      Handle gravity if the entity is above the line.
@@ -815,7 +807,7 @@ void World::singleDetect(Entity *e){
                                e->ground = true;
                                return;
                        }else if(e->vel.y > -2)e->vel.y-=.003 * deltaTime;
-                       
+                                       
                }
                
                /*