Merge pull request #3 from nippur72/main

Update repo
This commit is contained in:
Francesco Sblendorio 2021-12-22 17:51:41 +01:00 committed by GitHub
commit 78ba730941
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 68 additions and 41 deletions

View File

@ -40,12 +40,12 @@ void ck_init() {
void ck_drawpiece(sprite *pl) {
tile_offset *data = get_piece_offsets(pl->piece, pl->angle);
for(byte t=0; t<4; t++) {
int x = pl->x; byte x1 = data->offset_x; x+= (int) x1;
int y = pl->y; byte y1 = data->offset_y; y+= (int) y1;
/*
int x = pl->x + d->offset_x;
int y = pl->y + d->offset_y;
*/
// int x = pl->x; byte x1 = data->offset_x; x+= (int) x1;
// int y = pl->y; byte y1 = data->offset_y; y+= (int) y1;
int x = pl->x + (int) data->offset_x;
int y = pl->y + (int) data->offset_y;
WRITE_BOARD(y,x,pl->piece);
data++;
}
@ -55,12 +55,14 @@ void ck_drawpiece(sprite *pl) {
void ck_erasepiece(sprite *pl) {
tile_offset *data = get_piece_offsets(pl->piece, pl->angle);
for(byte t=0; t<4; t++) {
int x = pl->x; byte x1 = data->offset_x; x+= (int) x1;
int y = pl->y; byte y1 = data->offset_y; y+= (int) y1;
/*
int x = pl->x + (int) data->offset_x;
int y = pl->y + (int) data->offset_y;
*/
#ifdef BUG736
int x = pl->x; byte x1 = data->offset_x; x+= (int) x1;
int y = pl->y; byte y1 = data->offset_y; y+= (int) y1;
#else
int x = pl->x + (int) data->offset_x;
int y = pl->y + (int) data->offset_y;
#endif
WRITE_BOARD(y,x,EMPTY);
data++;
}
@ -70,12 +72,14 @@ void ck_erasepiece(sprite *pl) {
void ck_markpiece(sprite *pl) {
tile_offset *data = get_piece_offsets(pl->piece, pl->angle);
for(byte t=0; t<4; t++) {
int x = pl->x; byte x1 = data->offset_x; x+= (int) x1;
int y = pl->y; byte y1 = data->offset_y; y+= (int) y1;
/*
int x = pl->x + (int) data->offset_x;
int y = pl->y + (int) data->offset_y;
*/
#ifdef BUG736
int x = pl->x; byte x1 = data->offset_x; x+= (int) x1;
int y = pl->y; byte y1 = data->offset_y; y+= (int) y1;
#else
int x = pl->x + (int) data->offset_x;
int y = pl->y + (int) data->offset_y;
#endif
WRITE_BOARD(y,x,MARKED);
data++;
}
@ -85,11 +89,13 @@ void ck_markpiece(sprite *pl) {
int collides(sprite *pl) {
tile_offset *data = get_piece_offsets(pl->piece, pl->angle);
for(byte t=0; t<4; t++) {
int x = pl->x; byte x1 = data->offset_x; x+= (int) x1;
int y = pl->y; byte y1 = data->offset_y; y+= (int) y1;
//int x = pl->x + (int) data->offset_x;
//int y = pl->y + (int) data->offset_y;
#ifdef BUG736
int x = pl->x; byte x1 = data->offset_x; x+= (int) x1;
int y = pl->y; byte y1 = data->offset_y; y+= (int) y1;
#else
int x = pl->x + (int) data->offset_x;
int y = pl->y + (int) data->offset_y;
#endif
if(x<0) return 1; // does it collide with left border?
if(x>=BCOLS) return 1; // does it collide with right border?
if(y>=BROWS) return 1; // does it collide with bottom?

View File

@ -188,8 +188,8 @@ void gr_erasepiece(sprite *p) {
}
for(byte t=0; t<4; t++) {
int x = px + data->offset_x;
int y = py + data->offset_y;
int x = px + (int) data->offset_x;
int y = py + (int) data->offset_y;
data++;
draw_tile((byte)x,(byte)y,EMPTY_GR_CHAR,EMPTY_GR_COLOR);
}
@ -208,11 +208,19 @@ void gr_erasepiece_unmarked(sprite *p) {
py += STARTBOARD_Y;
for(byte t=0; t<4; t++) {
int x = px; byte x1 = data->offset_x; x+= (int) x1;
int y = py; byte y1 = data->offset_y; y+= (int) y1;
#ifdef BUG736
int x = px; byte x1 = data->offset_x; x+= (int) x1;
int y = py; byte y1 = data->offset_y; y+= (int) y1;
int cx = p->x; cx += (int) x1;
int cy = p->y; cy += (int) y1;
int cx = p->x; cx += (int) x1;
int cy = p->y; cy += (int) y1;
#else
int x = px + (int) data->offset_x;
int y = py + (int) data->offset_y;
int cx = p->x + (int) data->offset_x;
int cy = p->y + (int) data->offset_y;
#endif
data++;
@ -240,15 +248,17 @@ void gr_drawpiece(sprite *p) {
byte piece = p->piece;
for(byte t=0; t<4; t++) {
int x = px; byte x1 = data->offset_x; x+= (int) x1;
int y = py; byte y1 = data->offset_y; y+= (int) y1;
#ifdef BUG736
int x = px + (int) data->offset_x;
int y = py + (int) data->offset_y;
else
int x = px + (int) data->offset_x;
int y = py + (int) data->offset_y;
#endif
data++;
/*
int x = px + data[t].offset_x;
int y = py + data[t].offset_y;
*/
byte ch = piece_chars[piece]; //piece_chars[p->piece];
byte col = piece_colors[piece]; //piece_colors[p->piece];
byte ch = piece_chars[piece];
byte col = piece_colors[piece];
draw_tile((byte)x,(byte)y,ch,col);
}
}

View File

@ -10,6 +10,9 @@
// previous implementations for the Laser 310 and Laser 500
//
// KickC bug waiting to be fixed
#define BUG736 1
// standard libraries
#include <string.h> // memset, memcopy (memcopy no longer necessary)
#include <stdlib.h> // for sprintf, rand
@ -321,7 +324,6 @@ void initGame() {
generate_new_piece();
}
void main() {
// install the start-of-frame interrupt detection

View File

@ -55,8 +55,9 @@ void screen2_puts(char *s, byte x, byte y, byte col) {
byte screen2_plot_mode = PLOT_MODE_SET;
byte pow2_table_reversed[8] = { 128,64,32,16,8,4,2,1 };
void screen2_plot(byte x, byte y) {
byte pow2_table_reversed[8] = { 128,64,32,16,8,4,2,1 };
word paddr = TMS_PATTERN_TABLE + (word)(x & 0b11111000) + (word)(y & 0b11111000)*32 + y%8;
tms_set_vram_read_addr(paddr);
byte data = TMS_READ_DATA_PORT;
@ -76,6 +77,13 @@ void screen2_plot(byte x, byte y) {
TMS_WRITE_DATA_PORT(data);
}
byte screen2_point(byte x, byte y) {
word paddr = TMS_PATTERN_TABLE + (word)(x & 0b11111000) + (word)(y & 0b11111000)*32 + y%8;
tms_set_vram_read_addr(paddr);
byte data = TMS_READ_DATA_PORT;
byte mask = pow2_table_reversed[x%8];
return (data & mask) != 0 ? 1 : 0;
}
signed int math_abs(signed int x) {
return x < 0 ? -x : x;
@ -106,11 +114,12 @@ void screen2_line(byte _x0, byte _y0, byte _x1, byte _y1) {
}
}
#define mul(a,b) ((signed long)mulf16s((signed int)(a),(signed int)(b)))
// http://members.chello.at/~easyfilter/bresenham.html
/* TODO: FIX THIS, IT DOES NOT DRAW AN ELLIPSE
void screen2_ellipse_rect(byte _x0, byte _y0, byte _x1, byte _y1)
{
/*
if (tms_global_mulf_initialized == 0) {
mulf_init();
tms_global_mulf_initialized = 1;
@ -153,9 +162,9 @@ void screen2_ellipse_rect(byte _x0, byte _y0, byte _x1, byte _y1)
}
}
}
*/
// http://members.chello.at/~easyfilter/bresenham.html
void screen2_circle(byte _xm, byte _ym, byte _r) {