Login [Register]
Don't have an account? Register now to chat, post, use our tools, and much more.

How does this sound?
Good.
 40%  [ 6 ]
Very good.
 46%  [ 7 ]
Good, but you're never going to finish.
 13%  [ 2 ]
I don't care.
 0%  [ 0 ]
Awful.
 0%  [ 0 ]
Mediocre.
 0%  [ 0 ]
Total Votes : 15

CC23: epsilon5

Overview
My CC23 entry for Spies & Stealth will task the player with completing somewhere around 20 levels, each on a floor of a high-rise skyscraper. During the levels, the player will encounter increasingly difficult AI guards who will pull out all the stops to catch you in your quest to steal some sort of treasure or valuable information on the top floor of the building.

AI and player interactions
The AI in the game will range from simple security guards who will attempt to sound the alarm if they see you on the lower floors, to heavily armed and intelligent guards on the higher floors who will shoot you on sight. As the player, you will have to try your best to stay out of the line of sight of the AI. If they see you, you will have to make the decision to sprint at the exit, risking enemy fire, turn yourself in, or shoot them. You will have to do this before you are shot or the alarm is sounded (you'll have about a three second period to do this before the alarm goes through). If they're shot, though, and another guard sees them, that guard will sound the alarm. You will lose if you are arrested, shot, or the alarm is sounded.

General
My entry will be coded in C for the TI 84 Plus CE.

Conclusion
That's the plan, let me know what you think.

Progress
General plan 100%
AI 100%
Physics (player, bullets, etc.) 100%
Levels 100%
Menus 100%
Polish 100%
Status Complete for CC23 submission.

Latest Screenshot
Latest screenshot, showing the full playthrough of the contest submission:


Disclaimer
If someone else had this idea, I'm sorry. It's the first thing I thought of when I saw the contest thing, and I didn't read anyone's thread before formulating my plan. I'm saying this because I just saw BasicTH's comment in his thread that everyone was going to do this type of program.
Here's my plan for handling multiple bullets at once. Let me know if this is a good strategy, or if there is a better way.

So you'd create an appvar or have some space in memory, just to get some memory free. When the player or an AI fires a bullet, you'd use Seek( to find the closest position in memory with a string of, say, 5 zeroes. Then you'd use store the initial x and y of the bullet in this memory, as well as the angle it was fired at (using the 2-byte variables for x, 1 byte for y, and 2 bytes for the launch angle). When the loop next ran, I was going to draw my rotated sprites at x and y, then move them a certain distance along a line based on the angle they were fired at. If they hit the wall or an enemy, you'd store 0s for all 5 bytes, freeing that "slot" up for a new projectile. This method would only be limited by the amount of memory you allocated, as well.

What do you think? Would this work? Or is there a better way of doing it?

Sorry for the double post.

Mateo's going to have a heart attack when he reads this probably awful idea.
That is the freaking worst way possible to do it.


Code:
typedef struct {
    int x;
    int y;
    uint8_t angle;
    bool valid;
} bullet_t;
bullet_t bullet[20];

void draw(void) {
    uint8_t i;
    for (i = 0; i < 20; ++i) {
        bullet_t *b = &bullet[i];
        if (!b->valid) continue;

        gfx_Sprite(bullet_sprite, b->x, b->y);
    }
}
How would you update the positions using this code? Or am I just missing something? It looks like this would just render the bullet at x, y.
I'm not going to tell you how you should write your code...
It's okay. Thanks for your help. You're right, I really should figure out how to do this myself.
Mateo was more saying, define each bullet as a specific structure and then maintain an array of said bullet structures so you can easily iterate through them for drawing/updating etc.

He hasn't demonstrated updating coordinates since it is unclear how exactly you want them to behave - you could define additional information in your struct (such as bullet 'type' etc) that you could use to determine behaviour. His code was just an example to show you the idea.
Sorry in advance for these stupid questions.

All I want this part of the program to do is check if the user is pressing left or right. If he/she is, then it will either add or subtract from the integer angle. If he/she hits [clear], the program should quit. Also, it should display the current value of angle. I know this is horrifically optimized, that I should be using angle++ instead of angle = angle + 1, etc. The issue with this is that it does absolutely nothing that it is supposed to: it doesn't quit when it is supposed to, doesn't augment or subtract from angle, and always displays 0 as angle. Any help would be appreciated, thanks in advance.


Code:
// Program Name: Spy Game
// Author(s): epsilon5
// Description: CC23 entry

/* Keep these headers */
#include <tice.h>

/* Standard headers - it's recommended to leave them included */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Other available headers */
// including stdarg.h, setjmp.h, assert.h, ctype.h, float.h, iso646.h, limits.h, errno.h

/* Available libraries */
// including lib/ce/graphc.h, lib/ce/fileioc.h, and lib/ce/keypadc.h
// Sample: #include <lib/ce/graphc.h>
#include <graphx.h>
#include <fileioc.h>
#include <keypadc.h>
#include <intce.h>
#include <tice.h>
/* Put your function prototypes here */

/* Put all your globals here. */

/* Put all your code here */

void main() {
   // Main program code goes here
   int x = 160;
   int y = 120;
   int angle = 0;
   gfx_Begin();
   gfx_SetDraw(1);
   while(!kb_Data[6] & kb_Clear) {
      kb_Scan();
      if (kb_Data[7] & kb_Left) {
         angle--;
      }
      if (kb_Data[7] & kb_Right) {
         angle++;
      }
      if (kb_Data[7] & kb_Up) {
      }
      gfx_SetColor(255);
      gfx_FillRectangle(5, 5, 100, 40);
      gfx_SetTextXY(5, 5);
      gfx_PrintUInt(angle, 1);
      gfx_SwapDraw();
   }
}


Edit 1 Thanks to matkeller19 for helping out with this issue. Changing the angle is now working correctly, but not quitting.
irc wrote:
21:38 <MateoC> https://en.cppreference.com/w/c/language/operator_precedence
21:39 <MateoC> logical ! has higher precedence than bitwise &
21:39 <MateoC> also that should probably be a do-while loop, so kb_Scan can run at least once
21:40 <MateoC> you probably meant to do !(kb_Data[6] & kb_Clear)
Thanks to mateo and matkeller19, I've figured out everything I was working on yesterday, and got player movement somewhat worked out. Here's some code:

Code:
// Program Name: Spy Game
// Author(s): epsilon5
// Description: CC23 entry

/* Keep these headers */
#include <tice.h>

/* Standard headers - it's recommended to leave them included */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Other available headers */
// including stdarg.h, setjmp.h, assert.h, ctype.h, float.h, iso646.h, limits.h, errno.h

/* Available libraries */
// including lib/ce/graphc.h, lib/ce/fileioc.h, and lib/ce/keypadc.h
// Sample: #include <lib/ce/graphc.h>
#include <graphx.h>
#include <fileioc.h>
#include <keypadc.h>
#include <intce.h>
#include <tice.h>
/* Put your function prototypes here */

/* Put all your globals here. */

/* Put all your code here */

void main() {
   // Main program code goes here
   float x = 160;
   float y = 120;
   float angle = 0;
   gfx_Begin();
   gfx_SetDraw(1);
   while (! (kb_Data[6] & kb_Clear)) {
      if (kb_Data[7] & kb_Left) {
         angle = angle - 0.01;
      }
      if (kb_Data[7] & kb_Right) {
         angle = angle + 0.01;
      }
      if (kb_Data[7] & kb_Up) {
         x = x + 2 * cos(angle);
         y = y + 2 * sin(angle);
      }
      if (kb_Data[7] & kb_Down) {
         x = x - 2 * cos(angle);
         y = y - 2 * sin(angle);
      }
      if (x > 320) {
         x = 320;
      }
      if (y > 240) {
         y = 240;
      }
      gfx_SetColor(255);
      gfx_FillScreen(255);
      gfx_SetColor(0);
      gfx_FillCircle(x + cos(angle), y + sin(angle), 2);
      gfx_Line(x, y, x + 50 * cos(angle), y + 50 * sin(angle));     
      gfx_SetTextXY(5, 5);
      gfx_PrintInt(angle * 1000, 4);
      gfx_SwapDraw();
   }
   gfx_End();   
}


I still need to keep angle from overflowing and add the ability to walk backward, but that should be fairly trivial. I'm having a lot of fun with this, should have switched to C earlier. I will add a screenshot to the latest screenshot thing soon.

Edit
That wasn't trivial at all. I think I'm doing something wrong in my calculations, such that when you go forward, your slope will be one slope, and when you go backwards, it'll be another. Also, the line, which is supposed to point in the direction you are going, is messed up. The issue could be that I ported this from a TI-Basic program I made earlier today, where the origin is in the middle of the screen. Here, it's on the top left, so that could be the problem. I've already spent way too much time on this, so does anyone know what could be wrong?

Edit 2
Here's the TI-Basic code, in case anyone was wondering.

Code:
:DCS
"B11BB00BB22BB33B1BB10BB02BB23BB31BB10BB02BB23BB3B11BB00BB22BB33BB00BB22BB33BB11B0BB02BB23BB31BB10BB02BB23BB31BB1B00BB22BB33BB11BB22BB33BB11BB00B2BB23BB31BB10BB02BB23BB31BB10BB0B22BB33BB11BB00BB33BB11BB00BB22B3BB31BB10BB02BB23BB31BB10BB02BB2B33BB11BB00BB22B"
Fix 0
Degree

0→X
0→Y


DispGraph
AxesOff
CoordOn
GridOff
0→A
Repeat K=45
getKey→K
If K=15
0→X
If K=15
0→Y
If K=24
A-10→A
If K=26
A+10→A
If K=25
Goto A
If K=34
Goto B
If K=11
Y+1→Y
If K≠25 and K≠34
Goto C
Lbl A
X+cos(A)→X
Y+sin(A)→Y
Goto C
Lbl B
X-cos(A)→X
Y-sin(A)→Y
Lbl C
Pt-On(X+cos(A),Y+sin(A))
End


Thanks again for your help.

Edit 3
Got it! Thanks to everyone who helped out, especially matkeller19 and KryptonicDragon. Turns out having a couple decimal places for the x and y coordinates as well as the angle helped a lot.
Some progress on bullet firing:

Code:
// Program Name: Spy Game
// Author(s): epsilon5
// Description: CC23 entry

/* Keep these headers */
#include <tice.h>

/* Standard headers - it's recommended to leave them included */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Other available headers */
// including stdarg.h, setjmp.h, assert.h, ctype.h, float.h, iso646.h, limits.h, errno.h
#include <stbool.h>

/* Available libraries */
// including lib/ce/graphc.h, lib/ce/fileioc.h, and lib/ce/keypadc.h
// Sample: #include <lib/ce/graphc.h>
#include <graphx.h>
#include <fileioc.h>
#include <keypadc.h>
#include <intce.h>
#include <tice.h>
/* Put your function prototypes here */

/* Put all your globals here. */

/* Put all your code here */
void main() {
   short last
   bool foundlast
   typedef struct {
    float x;
    float y;
    float angle;
    bool valid;
   } bullet_t;
bullet_t bullet[20];



/* Other functions go here. */
void RenderBullets(void) {
   uint8_t i;
   foundlast = false;
    for (i = 0; i < 20; ++i) {
        bullet_t *b = &bullet[i];
      if (!b->valid) {
         if (!foundlast) {
            last = i;
            foundlast = true;   
         }
         continue;
      }
      b->x = b->x + 4 * cos(b->angle);
        b->y = b->y + 4 * sin(b->angle);
        gfx_Sprite(bullet_sprite, b->x, b->y);
    }
}

void FireBullet(float x, float y, float angle, short last) {
   if (foundlast) {
      bullet_t *b = &bullet[last];
      b->x = x;
      b->y = y;
      b->angle = angle;
      b->valid = true;
   }
}


Thanks again Mateo. If anyone sees any problems with this, please let me know.
Is this your file? Or did you copy and paste snippets?
tr1p1ea wrote:
Is this your file? Or did you copy and paste snippets?


I modified Mateoís code that he posted earlier for making the array and reading from it, but it is otherwise 100% mine. I donít copy and paste.

I guess that means the code is good lol.
Just got around to testing that code I posted earlier, and well... it doesn't even compile.

Here's what the error information says:

Code:


C:\CEdev\Projects\Spy>make
C CE SDK Version 8.5
C:\CEdev\Projects\Spy\src\main.c
C:\CEDEV\PROJECTS\SPY\SRC\MAIN.C        (44,22) :       ERROR (128) Identifier "
b" not defined within current scope
C:\CEDEV\PROJECTS\SPY\SRC\MAIN.C        (44,22) :       ERROR (153) Left express
ion to "*" must be arithmetic type
C:\CEDEV\PROJECTS\SPY\SRC\MAIN.C        (44,22) :       ERROR (100) Syntax error

C:\CEDEV\PROJECTS\SPY\SRC\MAIN.C        (44,34) :       ERROR (175) Structure or
 union tag "bullett" is not defined
C:\CEDEV\PROJECTS\SPY\SRC\MAIN.C        (44,5) :        WARNING (222) Statement
has no effect
make: *** [obj/main.src] Error -1
C:\CEdev\Projects\Spy>


Here's the code:

Code:
// Program Name: Spy Game
// Author(s): epsilon5
// Description: CC23 entry

/* Keep these headers */
#include <tice.h>

/* Standard headers - it's recommended to leave them included */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Other available headers */
// including stdarg.h, setjmp.h, assert.h, ctype.h, float.h, iso646.h, limits.h, errno.h
/* Available libraries */
// including lib/ce/graphc.h, lib/ce/fileioc.h, and lib/ce/keypadc.h
// Sample: #include <lib/ce/graphc.h>
#include <graphx.h>
#include <fileioc.h>
#include <keypadc.h>
#include <intce.h>
#include <tice.h>
#include <stdbool.h>
#include <math.h>
/* Put your function prototypes here */
static float plx = 160;
static float ply = 120;
static float plangle = 0;
static short last = 0;
static bool foundlast = false;
static struct {
   float x;
       float y;
       float angle;
       bool valid;
} bullett;
struct bullett bullet[20];

void RenderBullets(void) {
   uint8_t i;
   foundlast = false;
       for (i = 0; i < 20; ++i) {
           bullett *b = &bullet[i];
      if (!b->valid) {
         if (!foundlast) {
            last = i;
            foundlast = true;   
         }
         continue;
      }
      b->x = b->x + 4 * cos(b->angle);
           b->y = b->y + 4 * sin(b->angle);
           gfx_FillCircle(b->x, b->y, 2);
       }   
}

void FireBullet(float x, float y, float angle, short last) {
   if (foundlast) {
      bullett *b = &bullet[last];
      b->x = x;
      b->y = y;
      b->angle = angle;
      b->valid = true;
   }
}
/* Put all your globals here. */

/* Put all your code here */

void main() {
   // Main program code goes here
   gfx_Begin();
   gfx_SetDraw(1);
   while (! (kb_Data[6] & kb_Clear)) {
      if (kb_Data[7] & kb_Left) {
         plangle = plangle - 0.01;
      }
      if (kb_Data[7] & kb_Right) {
         plangle = plangle + 0.01;
      }
      if (kb_Data[7] & kb_Up) {
         plx = plx + 2 * cos(plangle);
         ply = ply + 2 * sin(plangle);
      }
      if (kb_Data[7] & kb_Down) {
         plx = plx - 1 * cos(plangle);
         ply = ply - 1 * sin(plangle);
      }
      if (plx > 320) {
         plx = 320;
      }
      if (ply > 240) {
         ply = 240;
      }
      gfx_SetColor(255);
      gfx_FillScreen(255);
      gfx_SetColor(0);
      gfx_FillCircle(plx + cos(plangle), ply + sin(plangle), 2);
      gfx_Line(plx, ply, plx + 50 * cos(plangle), ply + 50 * sin(plangle));     
      gfx_SetTextXY(5, 5);
      gfx_PrintInt(plangle * 1000, 4);
      gfx_SwapDraw();

   }
   gfx_End();   
}

//Other functions


I couldn't finish this game without the help of you guys, thanks for your help this far. Needless to say, everyone who helps will get a place in the credits of Ace Recon, which will be the name of the game.

Edit: Globalized variables, moved functions to before void (main).
Error 1: foundLast is not declared in the function. Variables will not be passed between functions unless told to. Looking at what your code does, you could either make foundLast a global and declare it above the main() function or you could pass foundLast into the function (if you did this, you would need to write foundLast = RenderBullets(foundLast) and declare RenderBullets with return type bool and pass the argument bool foundLast.


Error 2: Same as before, except your structure is being defined inside main() this time and can only be used in main(). If you want bullett structures outside of main, add the typedef above main() under the add globals comment.

Error 3: I'm guessing due to error 2

Error 4: Follow error 2

Error 5: Follow error 2 (again)

Error 6: move short last = 0; to your RenderBullets function (It isn't passed automatically)

Error 7: Refer to Error 1

Edit: In my opinion, the best way to learn how to program is to read some of the ones other people have written. Check through the archives for source code and see how they did it as an example to how you want your program to be like (my favorite is Flappy Bird because it usually has aspects similar to what I'm trying to implement). Select programs which have a function similar to what you want (eg. gravity, falling edge detection, etc)
Hey yeah this is why I asked if you were copying+pasting code into your post as snippets as it appeared that it wouldn't compile.
Bullet firing is finally working! I'll post a screenshot soon, super happy with how it turned out. It's pretty fast, too! Special thanks to matkeller (again). I'll add a screenshot in a few minutes.
The guards aren't moving in this build, and they're not shown for some reason either. The gfx_FillCircle seems to have done nothing. Someone mind taking a look? The issue will be in RenderGuards somewhere, I assume. Thanks in advance.

Code:
// Program Name: Spy Game
// Author(s): epsilon5
// Description: CC23 entry

/* Keep these headers */
#define FORCE_INTERRUPTS
#include <tice.h>

/* Standard headers - it's recommended to leave them included */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Other available headers */
// including stdarg.h, setjmp.h, assert.h, ctype.h, float.h, iso646.h, limits.h, errno.h
/* Available libraries */
// including lib/ce/graphc.h, lib/ce/fileioc.h, and lib/ce/keypadc.h
// Sample: #include <lib/ce/graphc.h>
#include <graphx.h>
#include <fileioc.h>
#include <keypadc.h>
#include <intce.h>
#include <tice.h>
#include <stdbool.h>
#include <math.h>
/* Put your function prototypes here */

//variables definitions
short last = 0;
bool foundlast = false;
float plx = 160;
float ply = 120;
float plangle = 0;
bool canfire = true;

//bullets structure
typedef struct {
    float x;
    float y;
    float angle;
    bool valid;
} bullet_t;
bullet_t bullet[20];

typedef struct {
    float defaultx;
    short enemytype;
    float defaulty;
    float angle;
    bool verthoriz;
    short patrolarea;
    float attemptangle;
    float attemptx;
    float attempty;
    float currentx;
    float currenty;
    bool ko;
    bool seenplayer;
} guard;
guard guards[10];

void LoadGuard(short location, int defaultx, int defaulty, short type, short patrolarea) {
    guards[location].defaultx = defaultx;
    guards[location].defaulty = defaulty;
    guards[location].currentx = defaultx;
    guards[location].currenty = defaulty;
    guards[location].angle = 50;
    guards[location].patrolarea = patrolarea;
    if (type == 1) {
        guards[location].patrolarea = 50;
        guards[location].verthoriz = true;
    }
    if (guards[location].verthoriz) {
        guards[location].attempty = defaulty + patrolarea;
    }
    if (! (guards[location].verthoriz)) {
        guards[location].attemptx = defaultx + patrolarea;
    }
}


void RenderGuards(void) {
    uint8_t i;
    gfx_SetColor(18);
    for(i = 0; i > 10; ++i) {
        if (guards[i].seenplayer) {
            guards[i].attemptangle = atan2(guards[i].currenty - ply, guards[i].currentx - plx);
        }
        if (guards[i].attemptangle != guards[i].angle) {
            guards[i].angle = guards[i].angle + 0.01;
        } else {
            if (! (guards[i].seenplayer)) {
                guards[i].currentx = guards[i].currentx + 2 * cos(guards[i].angle);
                guards[i].currenty = guards[i].currenty + 2 * sin(guards[i].angle);
            }
            if (guards[i].seenplayer) {
                if (foundlast) {
                    bullet[last].x = guards[i].currentx;
                    bullet[last].y = guards[i].currenty;
                    bullet[last].angle = guards[i].angle;
                    bullet[last].valid = true;
                }
            }
        }
        if ((guards[i].currentx = guards[i].attemptx) && (guards[i].currenty = guards[i].attempty)) {
            if (! (guards[i].seenplayer)) {
                guards[i].attemptangle = guards[i].angle + 3.14;
                if ((guards[i].currentx = guards[i].defaultx) && (guards[i].currenty = guards[i].defaulty)) {
                    if (guards[i].verthoriz) {
                        guards[i].attempty = guards[i].currenty - guards[i].patrolarea;
                    } else {
                        guards[i].attemptx = guards[i].currentx - guards[i].patrolarea;
                    }
                }
                else {
                    if (guards[i].verthoriz) {
                        guards[i].attempty = guards[i].defaulty;
                    } else {
                        guards[i].attemptx = guards[i].defaultx;
                    }
                }
            }
        }
        gfx_FillCircle(50, 50, 5);
        gfx_FillCircle(guards[i].currentx, guards[i].currenty, 5);
        gfx_Line(guards[i].currentx, guards[i].currenty, guards[i].currentx + 25 * cos(guards[i].angle), guards[i].currenty + 25 * sin(guards[i].angle));
    }
}
void RenderBullets(void) {
    uint8_t i;
    foundlast = false;
    for (i = 0; i < 20; ++i) {
        if (!bullet[i].valid) {
            if (!(foundlast)) {
                last = i;
                foundlast = true;
            }
            continue;
        }
        bullet[i].x = bullet[i].x + 8 * cos(bullet[i].angle);
        bullet[i].y = bullet[i].y + 8 * sin(bullet[i].angle);
        if (bullet[i].x > 320 || bullet[i].x < 0 || bullet[i].y > 240 || bullet[i].y < 0) {
            bullet[i].valid = false;
        }
        gfx_SetColor(224);
        gfx_FillCircle(bullet[i].x, bullet[i].y, 2);
    }
}

void FireBullet(float x, float y, float angle, short last) {
    if (foundlast) {
        bullet[last].x = x;
        bullet[last].y = y;
        bullet[last].angle = angle;
        bullet[last].valid = true;
    }
}
/* Put all your globals here. */

/* Put all your code here */

void main(void) {
// Main program code goes here
    gfx_Begin();
    gfx_SetDraw(1);
    LoadGuard(0, 0, 50, 1, 50);
    while (! (kb_Data[6] & kb_Clear)) {
        if (kb_Data[7] & kb_Left) {
            plangle = plangle - 0.01;
        }
        if (kb_Data[7] & kb_Right) {
            plangle = plangle + 0.01;
        }
        if (kb_Data[7] & kb_Up) {
            plx = plx + 2 * cos(plangle);
            ply = ply + 2 * sin(plangle);
        }
        if (kb_Data[7] & kb_Down) {
            plx = plx - 1 * cos(plangle);
            ply = ply - 1 * sin(plangle);
        }
        if (kb_Data[1] & kb_2nd  && (canfire)) {
            FireBullet(plx, ply, plangle, last);
            canfire = false;
        }
        if (! (kb_Data[1] & kb_2nd)) {
            canfire = true;
        }
        if (plx > 320) {
            plx = 320;
        }
        if (ply > 240) {
            ply = 240;
        }
        if (plangle > 6.28) {
            plangle = 0;
        }
        if (plangle < 0) {
            plangle = 6.28;
        }
        gfx_SetColor(255);
        gfx_FillScreen(255);
        gfx_SetColor(0);
        gfx_FillCircle(plx + cos(plangle), ply + sin(plangle), 5);
        gfx_Line(plx, ply, plx + 25 * cos(plangle), ply + 25 * sin(plangle));
        gfx_SetTextXY(5, 5);
        gfx_PrintInt(guards[0].currentx, 4);
        gfx_SetTextXY(5, 15);
        gfx_PrintInt(guards[0].currenty, 4);
        gfx_SetTextXY(5, 25);
        gfx_PrintInt(guards[0].angle, 4);
        gfx_SetTextXY(5, 35);
        gfx_PrintInt(guards[0].attemptangle, 4);
        RenderGuards();
        RenderBullets();
        gfx_SwapDraw();
    }
    gfx_End();
}


EDIT- Fixed, I messed up the for loop so that it never ran. Guards are still pretty messed up though, working on that now. If anyone has any suggestions, please feel free to tell them.
I figured it's about time for another progress update, so here you go:
-bullets have been changed, they now only fire as fast as the player can click (instead of checking every loop to see if [enter] is being held)
-primitive AI has been started, it sort of goes to the right angle and coordinates, but it's very much still a work in progress
-I made a level editor that I will have to rewrite in C (it's in ICE now, which won't work because it uses 3 bytes as integers, and in C I can make the levels appvar 3x smaller and the main program run faster with shorts)
-I figured out the basics of how to read out level data as well (from an appvar).

I can post screenshots of the editor and general gameplay stuff if you guys want.

EDIT- I think Iím just going to keep the ICE editor for now, as rewriting it would take up valuable time I should be using to figure out the AI and collision detection. I could always rewrite at the end if I have more time. Any opinions?
Definitely get the AI and collision working first, and then the ICE editor last, because you need a real game for the level editor. Also, this is sounding amazing! So much further than I am... I would love to see some screenshots if possible! Good luck on finishing in time!
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 3
» All times are GMT - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement