mirror of
https://github.com/stevenhowes/CTheEscape.git
synced 2026-05-26 15:53:29 +01:00
Store pointers for indexed sprites for anything that's redrawn every frame.
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -40,14 +40,18 @@ Squeezeflags = -o $@
|
||||
|
||||
|
||||
# Dynamic dependencies:
|
||||
o.Graphics: c.Graphics
|
||||
o.Graphics: C:h.swis
|
||||
o.Graphics: C:h.kernel
|
||||
o.Graphics: C:h.kernel
|
||||
o.Input: c.Input
|
||||
o.Input: C:h.swis
|
||||
o.Input: C:h.kernel
|
||||
o.Input: C:h.kernel
|
||||
o.Graphics: c.Graphics
|
||||
o.Graphics: C:h.swis
|
||||
o.Graphics: C:h.kernel
|
||||
o.Graphics: C:h.kernel
|
||||
o.Graphics: c.Graphics
|
||||
o.Graphics: C:h.swis
|
||||
o.Graphics: C:h.kernel
|
||||
o.Graphics: C:h.kernel
|
||||
o.CTheEscape: c.CTheEscape
|
||||
o.CTheEscape: C:h.swis
|
||||
o.CTheEscape: C:h.kernel
|
||||
|
||||
@@ -132,6 +132,35 @@ void draw_rectangle(int x1,int y1,int x2,int y2)
|
||||
draw_line(x2,y2,x1,y2);
|
||||
}
|
||||
|
||||
int get_sprite_address(char* spritename)
|
||||
{
|
||||
inreg.r[0] = 256+24;
|
||||
inreg.r[1] = (int) buffer;
|
||||
inreg.r[2] = (int) spritename;
|
||||
_kernel_swi(OS_SpriteOp,&inreg,&outreg);
|
||||
|
||||
if(outreg.r[2] == inreg.r[2])
|
||||
outreg.r[2] = 0;
|
||||
|
||||
return outreg.r[2];
|
||||
}
|
||||
|
||||
void draw_sprite_pointer(int pointer,int x, int y)
|
||||
{
|
||||
// Unable to look up address (or never tried)
|
||||
if(pointer == 0)
|
||||
return;
|
||||
|
||||
// SpriteOp 34 to put sprite at a location
|
||||
inreg.r[0] = 512+34;
|
||||
inreg.r[1] = (int) buffer;
|
||||
inreg.r[2] = pointer;
|
||||
inreg.r[3] = x;
|
||||
inreg.r[4] = y;
|
||||
inreg.r[5] = 8; // GCOL dest=source and sprite mask
|
||||
_kernel_swi(OS_SpriteOp,&inreg,&outreg);
|
||||
}
|
||||
|
||||
void draw_sprite(char* spritename,int x, int y)
|
||||
{
|
||||
// SpriteOp 34 to put sprite at a location
|
||||
|
||||
+23
-12
@@ -17,8 +17,9 @@ extern sound_composition_load(char *filename);
|
||||
extern _kernel_swi_regs inreg;
|
||||
extern _kernel_swi_regs outreg;
|
||||
|
||||
enum sprite_e{player_ship, durno_ship, ship_trgt, durno_ship2, ship2_trgt, player_shipl,player_shipr,explode_start,explode_shp2,explode_shp3,explode_end,photon1,photon2,plasma1,plasma2};
|
||||
char *sprites[] = {"player_ship","durno_ship","ship_trgt","durno_ship2","ship2_trgt","player_shipl","player_shipr","explode_shp1","explode_shp2","explode_shp3","explode_shp4","photon1","photon2","plasma1","plasma2"};
|
||||
enum sprite_e{player_ship, durno_ship, ship_trgt, durno_ship2, ship2_trgt, player_shipl,player_shipr,explode_start,explode_shp2,explode_shp3,explode_end,photon1,photon2,plasma1,plasma2,lcars,pointer,commspan1,maxsprites};
|
||||
char *sprites[] = {"player_ship","durno_ship","ship_trgt","durno_ship2","ship2_trgt","player_shipl","player_shipr","explode_shp1","explode_shp2","explode_shp3","explode_shp4","photon1","photon2","plasma1","plasma2","lcars","pointer","commspan1"};
|
||||
int spritepointer[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
|
||||
char hudbuffer[63];
|
||||
|
||||
@@ -163,7 +164,7 @@ void game_spawn_projectile(int id, int Px, int Py, int Vx, int Vy, enum sprite_e
|
||||
|
||||
void game_draw_player()
|
||||
{
|
||||
draw_sprite(sprites[Player.sprite], Player.location.X, Player.location.Y);
|
||||
draw_sprite_pointer(spritepointer[Player.sprite], Player.location.X, Player.location.Y);
|
||||
|
||||
if(debugs[dbhitbox])
|
||||
{
|
||||
@@ -268,13 +269,13 @@ void game_draw_npcs()
|
||||
// Don't bother if they are off the screen
|
||||
if(NPCS[i].location.Y < DISPLAY_Y)
|
||||
{
|
||||
draw_sprite(sprites[NPCS[i].sprite], NPCS[i].location.X, NPCS[i].location.Y);
|
||||
draw_sprite_pointer(spritepointer[NPCS[i].sprite], NPCS[i].location.X, NPCS[i].location.Y);
|
||||
|
||||
// Next sprite up in index is the appropriate target icon
|
||||
if(Player.targetleft == i)
|
||||
draw_sprite(sprites[NPCS[i].sprite + 1], NPCS[i].location.X, NPCS[i].location.Y);
|
||||
draw_sprite_pointer(spritepointer[NPCS[i].sprite + 1], NPCS[i].location.X, NPCS[i].location.Y);
|
||||
if(Player.targetright == i)
|
||||
draw_sprite(sprites[NPCS[i].sprite + 1], NPCS[i].location.X, NPCS[i].location.Y);
|
||||
draw_sprite_pointer(spritepointer[NPCS[i].sprite + 1], NPCS[i].location.X, NPCS[i].location.Y);
|
||||
|
||||
if(tick > NPCS[i].explodenextframe)
|
||||
{
|
||||
@@ -311,7 +312,7 @@ void game_draw_projectiles()
|
||||
if(Projectiles[i].active == 0)
|
||||
continue;
|
||||
|
||||
draw_sprite(sprites[Projectiles[i].sprite], Projectiles[i].location.X,Projectiles[i].location.Y);
|
||||
draw_sprite_pointer(spritepointer[Projectiles[i].sprite], Projectiles[i].location.X,Projectiles[i].location.Y);
|
||||
Projectiles[i].sprite++;
|
||||
if(Projectiles[i].sprite > Projectiles[i].spriteend)
|
||||
Projectiles[i].sprite = Projectiles[i].spritestart;
|
||||
@@ -809,17 +810,27 @@ void game_setup_audio()
|
||||
}
|
||||
void game_draw_hud()
|
||||
{
|
||||
draw_sprite("lcars",4,DISPLAY_Y-164);
|
||||
draw_sprite("pointer",141+(Player.shields*2),DISPLAY_Y - 164 + 84);
|
||||
draw_sprite("pointer",141+(Player.integrity*2),DISPLAY_Y - 164 + 44);
|
||||
draw_sprite("pointer",141+(Player.remainingdistance/7500),DISPLAY_Y - 164 + 4);
|
||||
draw_sprite_pointer(spritepointer[lcars],4,DISPLAY_Y-164);
|
||||
draw_sprite_pointer(spritepointer[pointer],141+(Player.shields*2),DISPLAY_Y - 164 + 84);
|
||||
draw_sprite_pointer(spritepointer[pointer],141+(Player.integrity*2),DISPLAY_Y - 164 + 44);
|
||||
draw_sprite_pointer(spritepointer[pointer],141+(Player.remainingdistance/7500),DISPLAY_Y - 164 + 4);
|
||||
}
|
||||
|
||||
void game_setup_sprites()
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < maxsprites ; i++)
|
||||
{
|
||||
spritepointer[i] = get_sprite_address(sprites[i]);
|
||||
}
|
||||
}
|
||||
void game1_setup()
|
||||
{
|
||||
game_setup_input();
|
||||
game_setup_audio();
|
||||
game_setup_stars();
|
||||
game_setup_sprites();
|
||||
game_setup_player();
|
||||
game_setup_npcs();
|
||||
tick = clock();
|
||||
@@ -1014,7 +1025,7 @@ void game1_victory()
|
||||
void game_draw_comms(char* msg)
|
||||
{
|
||||
// TODO: Need to scale this properly once font/text is final
|
||||
draw_sprite("commspan1",4,DISPLAY_Y-164);
|
||||
draw_sprite_pointer(spritepointer[commspan1],4,DISPLAY_Y-164);
|
||||
draw_spritetext(msg, 80, DISPLAY_Y-80);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user