mirror of
https://github.com/stevenhowes/CTheEscape.git
synced 2026-05-26 15:53:29 +01:00
Refer to tiles and font characters by pointer (once cached). Fixed missing colon from font. Minor map changes (and more obvious tile zero). Misc map tweaks.
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -5,8 +5,8 @@
|
|||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "Graphics.h"
|
#include "Graphics.h"
|
||||||
|
|
||||||
#define SKIP_INTRO
|
//#define SKIP_INTRO
|
||||||
#define SKIP_MISSION1
|
//#define SKIP_MISSION1
|
||||||
//#define SKIP_MISSION2
|
//#define SKIP_MISSION2
|
||||||
|
|
||||||
// SWI Registers
|
// SWI Registers
|
||||||
|
|||||||
+70
-15
@@ -10,7 +10,12 @@ extern unsigned char *buffer;
|
|||||||
extern unsigned char *fontbuffer;
|
extern unsigned char *fontbuffer;
|
||||||
extern unsigned char *tilebuffer;
|
extern unsigned char *tilebuffer;
|
||||||
|
|
||||||
|
char tilenamebuffer[4];
|
||||||
|
char letternamebuffer[2];
|
||||||
|
|
||||||
int screen = 1;
|
int screen = 1;
|
||||||
|
int tilecache[256];
|
||||||
|
int lettercache[256];
|
||||||
|
|
||||||
extern void screen_nobuffer();
|
extern void screen_nobuffer();
|
||||||
// Loads sprite file into buffer
|
// Loads sprite file into buffer
|
||||||
@@ -205,35 +210,86 @@ void draw_sprite_flippedv(char* spritename,int x, int y)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_letter(char* spritename,int x, int y)
|
int get_letter_address(int letternumber)
|
||||||
{
|
{
|
||||||
// SpriteOp 34 to put sprite at a location
|
if(lettercache[letternumber] > 0)
|
||||||
inreg.r[0] = 256+34;
|
return lettercache[letternumber];
|
||||||
|
|
||||||
|
sprintf(letternamebuffer,"%c",letternumber);
|
||||||
|
inreg.r[0] = 256+24;
|
||||||
inreg.r[1] = (int) fontbuffer;
|
inreg.r[1] = (int) fontbuffer;
|
||||||
inreg.r[2] = (int) spritename;
|
inreg.r[2] = (int) letternamebuffer;
|
||||||
|
_kernel_swi(OS_SpriteOp,&inreg,&outreg);
|
||||||
|
|
||||||
|
// For now, if we get an invalid character just display an X
|
||||||
|
// to make it really obvious
|
||||||
|
if(outreg.r[2] == inreg.r[2])
|
||||||
|
get_letter_address((int)'X');
|
||||||
|
|
||||||
|
lettercache[letternumber] = outreg.r[2];
|
||||||
|
|
||||||
|
return lettercache[letternumber];
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_letter(int letter,int x, int y)
|
||||||
|
{
|
||||||
|
int address = get_letter_address(letter);
|
||||||
|
// SpriteOp 34 to put sprite at a location
|
||||||
|
inreg.r[0] = 512+34;
|
||||||
|
inreg.r[1] = (int) fontbuffer;
|
||||||
|
inreg.r[2] = address;
|
||||||
inreg.r[3] = x;
|
inreg.r[3] = x;
|
||||||
inreg.r[4] = y;
|
inreg.r[4] = y;
|
||||||
inreg.r[5] = 8;
|
inreg.r[5] = 8;
|
||||||
_kernel_swi(OS_SpriteOp,&inreg,&outreg);
|
_kernel_swi(OS_SpriteOp,&inreg,&outreg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_tile(char* spritename,int x, int y)
|
int get_tile_address(int tilenumber)
|
||||||
{
|
{
|
||||||
// SpriteOp 34 to put sprite at a location
|
if(tilecache[tilenumber] > 0)
|
||||||
inreg.r[0] = 256+34;
|
return tilecache[tilenumber];
|
||||||
|
|
||||||
|
sprintf(tilenamebuffer,"%i",tilenumber);
|
||||||
|
inreg.r[0] = 256+24;
|
||||||
inreg.r[1] = (int) tilebuffer;
|
inreg.r[1] = (int) tilebuffer;
|
||||||
inreg.r[2] = (int) spritename;
|
inreg.r[2] = (int)tilenamebuffer;
|
||||||
|
_kernel_swi(OS_SpriteOp,&inreg,&outreg);
|
||||||
|
|
||||||
|
// Show default tile if not found
|
||||||
|
if(outreg.r[2] == inreg.r[2])
|
||||||
|
{
|
||||||
|
get_tile_address(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Caching 0 seems to make it shit itself?
|
||||||
|
if(tilenumber > 0)
|
||||||
|
tilecache[tilenumber] = outreg.r[2];
|
||||||
|
|
||||||
|
return outreg.r[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_tile(int tilenumber,int x, int y)
|
||||||
|
{
|
||||||
|
int address = get_tile_address(tilenumber);
|
||||||
|
|
||||||
|
// SpriteOp 34 to put sprite at a location
|
||||||
|
inreg.r[0] = 512+34;
|
||||||
|
inreg.r[1] = (int) tilebuffer; // unused because pointers are in use now
|
||||||
|
inreg.r[2] = address;
|
||||||
inreg.r[3] = x;
|
inreg.r[3] = x;
|
||||||
inreg.r[4] = y;
|
inreg.r[4] = y;
|
||||||
inreg.r[5] = 0;
|
inreg.r[5] = 0;
|
||||||
_kernel_swi(OS_SpriteOp,&inreg,&outreg);
|
_kernel_swi(OS_SpriteOp,&inreg,&outreg);
|
||||||
}
|
}
|
||||||
void draw_tile_trans(char* spritename,int x, int y)
|
|
||||||
|
void draw_tile_trans(int tilenumber,int x, int y)
|
||||||
{
|
{
|
||||||
|
int address = get_tile_address(tilenumber);
|
||||||
|
|
||||||
// SpriteOp 34 to put sprite at a location
|
// SpriteOp 34 to put sprite at a location
|
||||||
inreg.r[0] = 256+34;
|
inreg.r[0] = 512+34;
|
||||||
inreg.r[1] = (int) tilebuffer;
|
inreg.r[1] = (int) tilebuffer;
|
||||||
inreg.r[2] = (int) spritename;
|
inreg.r[2] = address;
|
||||||
inreg.r[3] = x;
|
inreg.r[3] = x;
|
||||||
inreg.r[4] = y;
|
inreg.r[4] = y;
|
||||||
inreg.r[5] = 8;
|
inreg.r[5] = 8;
|
||||||
@@ -245,15 +301,13 @@ void draw_spritetext(char* text, int x, int y)
|
|||||||
int currentx;
|
int currentx;
|
||||||
int currenty;
|
int currenty;
|
||||||
int i;
|
int i;
|
||||||
char str[2] = "\0";
|
|
||||||
currentx = x;
|
currentx = x;
|
||||||
currenty = y;
|
currenty = y;
|
||||||
for(i = 0; i < strlen(text); i++)
|
for(i = 0; i < strlen(text); i++)
|
||||||
{
|
{
|
||||||
str[0] = text[i];
|
|
||||||
|
|
||||||
if((text[i] != ' ') && (text[i] != '\n') && (text[i] != '~'))
|
if((text[i] != ' ') && (text[i] != '\n') && (text[i] != '~'))
|
||||||
draw_letter(str,currentx,currenty);
|
draw_letter(text[i],currentx,currenty);
|
||||||
|
|
||||||
switch (text[i])
|
switch (text[i])
|
||||||
{
|
{
|
||||||
@@ -262,6 +316,7 @@ void draw_spritetext(char* text, int x, int y)
|
|||||||
case '.':
|
case '.':
|
||||||
case ',':
|
case ',':
|
||||||
case 'y':
|
case 'y':
|
||||||
|
case ':':
|
||||||
currentx += 12 + 4;
|
currentx += 12 + 4;
|
||||||
break;
|
break;
|
||||||
case '\'':
|
case '\'':
|
||||||
|
|||||||
+20
-25
@@ -46,8 +46,7 @@ unsigned char map_overlay[3][TILESX][TILESY];
|
|||||||
|
|
||||||
unsigned char fullmap[10000*2];
|
unsigned char fullmap[10000*2];
|
||||||
|
|
||||||
char tilenamebuffer[4];
|
char textbuffer[128];
|
||||||
char textbuffer[63];
|
|
||||||
|
|
||||||
struct EntityLocation_s {
|
struct EntityLocation_s {
|
||||||
short signed int X,Y;
|
short signed int X,Y;
|
||||||
@@ -595,8 +594,8 @@ int game2_tick()
|
|||||||
lasttick = tick;
|
lasttick = tick;
|
||||||
tick = clock();
|
tick = clock();
|
||||||
|
|
||||||
screen_flipbuffer();
|
//screen_flipbuffer();
|
||||||
|
screen_nobuffer();
|
||||||
if(1)
|
if(1)
|
||||||
{
|
{
|
||||||
screen_clear();
|
screen_clear();
|
||||||
@@ -608,8 +607,7 @@ int game2_tick()
|
|||||||
if(1/*map[0][x][y] ^ map[screen+1][x][y]*/)
|
if(1/*map[0][x][y] ^ map[screen+1][x][y]*/)
|
||||||
{
|
{
|
||||||
map[screen+1][x][y] = map[0][x][y];
|
map[screen+1][x][y] = map[0][x][y];
|
||||||
sprintf(tilenamebuffer,"%i",map[screen+1][x][y] & 127);
|
draw_tile(map[screen+1][x][y] & 127,x*100,y*100);
|
||||||
draw_tile(tilenamebuffer,x*100,y*100);
|
|
||||||
if(((map[screen+1][x][y] >> 7) & 0x01))
|
if(((map[screen+1][x][y] >> 7) & 0x01))
|
||||||
{
|
{
|
||||||
draw_sprite("solid",x*100,y*100);
|
draw_sprite("solid",x*100,y*100);
|
||||||
@@ -618,8 +616,7 @@ int game2_tick()
|
|||||||
map_overlay[screen+1][x][y] = map_overlay[0][x][y];
|
map_overlay[screen+1][x][y] = map_overlay[0][x][y];
|
||||||
if(map_overlay[screen+1][x][y] > 0)
|
if(map_overlay[screen+1][x][y] > 0)
|
||||||
{
|
{
|
||||||
sprintf(tilenamebuffer,"%i",map_overlay[screen+1][x][y]);
|
draw_tile_trans(map_overlay[screen+1][x][y],x*100,y*100);
|
||||||
draw_tile_trans(tilenamebuffer,x*100,y*100);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
udt++;
|
udt++;
|
||||||
@@ -701,7 +698,7 @@ int game2_tick()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(textbuffer,"Tile:%i\nSprite:%i\nSolid: %i",
|
sprintf(textbuffer,"Tile:%i\nSprite:%i\nSolid: %i\n",
|
||||||
TilePlayer.rawtile,
|
TilePlayer.rawtile,
|
||||||
fullmap[TilePlayer.rawtile],
|
fullmap[TilePlayer.rawtile],
|
||||||
((fullmap[TilePlayer.rawtile] >> 7) & 0x01)
|
((fullmap[TilePlayer.rawtile] >> 7) & 0x01)
|
||||||
@@ -719,11 +716,11 @@ int game2_tick()
|
|||||||
if((i >=0) && (i <= 255))
|
if((i >=0) && (i <= 255))
|
||||||
{
|
{
|
||||||
if(i > 127)
|
if(i > 127)
|
||||||
sprintf(tilenamebuffer,"%i",i - 128);
|
draw_tile(i - 128,x,y);
|
||||||
else
|
else
|
||||||
sprintf(tilenamebuffer,"%i",i);
|
draw_tile(i,x,y);
|
||||||
|
|
||||||
|
|
||||||
draw_tile(tilenamebuffer,x,y);
|
|
||||||
|
|
||||||
if(i > 127)
|
if(i > 127)
|
||||||
sprintf(textbuffer,"%i",i - 128);
|
sprintf(textbuffer,"%i",i - 128);
|
||||||
@@ -745,8 +742,7 @@ int game2_tick()
|
|||||||
{
|
{
|
||||||
if((i >=0) && (i <= 255))
|
if((i >=0) && (i <= 255))
|
||||||
{
|
{
|
||||||
sprintf(tilenamebuffer,"%i",i);
|
draw_tile(i,x,y);
|
||||||
draw_tile(tilenamebuffer,x,y);
|
|
||||||
|
|
||||||
sprintf(textbuffer,"%i",i);
|
sprintf(textbuffer,"%i",i);
|
||||||
draw_spritetext(textbuffer, x+20, y+30);
|
draw_spritetext(textbuffer, x+20, y+30);
|
||||||
@@ -756,26 +752,25 @@ int game2_tick()
|
|||||||
}
|
}
|
||||||
y = y - 100;
|
y = y - 100;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
|
||||||
x = 1180;
|
x = 1180;
|
||||||
y = 750;
|
y = 750;
|
||||||
|
|
||||||
if(clipboard > 127)
|
if(clipboard > 127)
|
||||||
sprintf(tilenamebuffer,"%i",clipboard - 128);
|
draw_tile(clipboard - 128,x,y);
|
||||||
else
|
else
|
||||||
sprintf(tilenamebuffer,"%i",clipboard);
|
draw_tile(clipboard,x,y);
|
||||||
draw_tile(tilenamebuffer,x,y);
|
|
||||||
if(clipboard_overlay > 0)
|
if(clipboard_overlay > 0)
|
||||||
{
|
{
|
||||||
sprintf(tilenamebuffer,"%i",clipboard_overlay);
|
draw_tile_trans(clipboard_overlay,x,y);
|
||||||
draw_tile_trans(tilenamebuffer,x,y);
|
|
||||||
}
|
}
|
||||||
draw_sprite("select1",x,y);
|
draw_sprite("select1",x,y);
|
||||||
sprintf(tilenamebuffer,"%i",clipboard_tileid);
|
sprintf(textbuffer,"%i",clipboard_tileid);
|
||||||
draw_spritetext(tilenamebuffer, x+10, y+30);
|
draw_spritetext(textbuffer, x+10, y+30);
|
||||||
draw_spritetext("Clipboard", x-174, y+30);
|
draw_spritetext("Clipboard", x-174, y+30);
|
||||||
|
*/
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}else{
|
}else{
|
||||||
@@ -798,14 +793,14 @@ int game_hitbox_collide(int x1, int y1, int w1, int h1, int x2, int y2, int w2,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void exitfunc () {
|
void exitfunc () {
|
||||||
screen_flipbuffer();
|
/* screen_flipbuffer();
|
||||||
screen_clear();
|
screen_clear();
|
||||||
screen_flipbuffer();
|
screen_flipbuffer();
|
||||||
screen_clear();
|
screen_clear();
|
||||||
screen_nobuffer();
|
screen_nobuffer();
|
||||||
free(buffer);
|
free(buffer);
|
||||||
free(fontbuffer);
|
free(fontbuffer);
|
||||||
free(tilebuffer);
|
free(tilebuffer);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
|
|||||||
+3
-7
@@ -30,7 +30,6 @@ unsigned char fullmap[10000*2];
|
|||||||
|
|
||||||
unsigned char areaname[13];
|
unsigned char areaname[13];
|
||||||
|
|
||||||
char tilenamebuffer[4];
|
|
||||||
char textbuffer[63];
|
char textbuffer[63];
|
||||||
|
|
||||||
struct EntityLocation_s {
|
struct EntityLocation_s {
|
||||||
@@ -750,17 +749,14 @@ int game2_tick()
|
|||||||
{
|
{
|
||||||
map[screen+1][x][y] = map[0][x][y];
|
map[screen+1][x][y] = map[0][x][y];
|
||||||
if(map[screen+1][x][y] < 128)
|
if(map[screen+1][x][y] < 128)
|
||||||
sprintf(tilenamebuffer,"%i",map[screen+1][x][y]);
|
draw_tile(map[screen+1][x][y],x*100,y*100);
|
||||||
else
|
else
|
||||||
sprintf(tilenamebuffer,"%i",(map[screen+1][x][y]-128));
|
draw_tile((map[screen+1][x][y]-128),x*100,y*100);
|
||||||
|
|
||||||
draw_tile(tilenamebuffer,x*100,y*100);
|
|
||||||
|
|
||||||
map_overlay[screen+1][x][y] = map_overlay[0][x][y];
|
map_overlay[screen+1][x][y] = map_overlay[0][x][y];
|
||||||
if(map_overlay[screen+1][x][y] > 0)
|
if(map_overlay[screen+1][x][y] > 0)
|
||||||
{
|
{
|
||||||
sprintf(tilenamebuffer,"%i",map_overlay[screen+1][x][y]);
|
draw_tile_trans(map_overlay[screen+1][x][y],x*100,y*100);
|
||||||
draw_tile_trans(tilenamebuffer,x*100,y*100);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user