mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-10-10 08:23:49 +00:00
Merge branch 'master' of https://github.com/deater/dos33fsprogs
This commit is contained in:
commit
53d24d3dcc
@ -16,13 +16,34 @@
|
|||||||
|
|
||||||
/* Metrocat Easter Egg (summon?) */
|
/* Metrocat Easter Egg (summon?) */
|
||||||
|
|
||||||
/* Enemies: */
|
/* Environment: grass, beach, forest, ice */
|
||||||
/* Killer Crab, Evil Tree, Deadly Bees, Big Fish, Procrastinon */
|
|
||||||
|
/* Enemies: HP ATTACK WEAKNESS RESIST */
|
||||||
|
/* Killer Crab RND-32 PINCH MALAISE FIRE
|
||||||
|
Plain Fish BUBBLE FIRE ICE
|
||||||
|
|
||||||
|
Evil Tree RND-16 LEAVE FIRE ICE
|
||||||
|
Wood Elf SING MALAISE FIRE
|
||||||
|
|
||||||
|
Giant Bee RND-64 BUZZSAW ICE NONE
|
||||||
|
Procrastinon RND-32 PUTOFF NONE MALAISE
|
||||||
|
|
||||||
|
Ice Fish RND-32 AUGER FIRE ICE
|
||||||
|
EvilPenguin WADDLE FIRE ICE
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
/* Battle.
|
/* Battle.
|
||||||
Forest? Grassland? Artic? Ocean?
|
Forest? Grassland? Artic? Ocean?
|
||||||
|
ATTACK REST
|
||||||
|
MAGIC LIMIT
|
||||||
|
SUMMON RUN
|
||||||
|
|
||||||
|
SUMMONS -> METROCAT
|
||||||
|
MAGIC -> HEAL FIRE
|
||||||
|
ICE MALAISE
|
||||||
|
LIMIT -> SLICE ZAP
|
||||||
|
DROP
|
||||||
|
|
||||||
1 2 3
|
1 2 3
|
||||||
0123456789012345678901234567890123456789|
|
0123456789012345678901234567890123456789|
|
||||||
@ -50,21 +71,125 @@ List hits
|
|||||||
/* Room for guinea pig in party? */
|
/* Room for guinea pig in party? */
|
||||||
|
|
||||||
/* Attacks -> HIT, ZAP, HEAL, RUNAWAY */
|
/* Attacks -> HIT, ZAP, HEAL, RUNAWAY */
|
||||||
|
#define MAGIC_NONE 0
|
||||||
|
#define MAGIC_FIRE 1
|
||||||
|
#define MAGIC_ICE 2
|
||||||
|
#define MAGIC_MALAISE 4
|
||||||
|
|
||||||
|
struct enemy_type {
|
||||||
|
char *name;
|
||||||
|
int hp_base,hp_mask;
|
||||||
|
char *attack_name;
|
||||||
|
int weakness,resist;
|
||||||
|
unsigned char *sprite;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct enemy_type enemies[8]={
|
||||||
|
[0]= {
|
||||||
|
.name="Killer Crab",
|
||||||
|
.hp_base=10,
|
||||||
|
.hp_mask=0x1f,
|
||||||
|
.attack_name="Pinch",
|
||||||
|
.weakness=MAGIC_MALAISE,
|
||||||
|
.resist=MAGIC_FIRE,
|
||||||
|
.sprite=killer_crab,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static int attack(int enemy_x,int enemy_type) {
|
||||||
|
|
||||||
|
int ax=34;
|
||||||
|
|
||||||
|
while(ax>10) {
|
||||||
|
|
||||||
|
gr_copy_to_current(0xc00);
|
||||||
|
|
||||||
|
if (ax&1) {
|
||||||
|
grsim_put_sprite(tfv_stand_left,ax,20);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
grsim_put_sprite(tfv_walk_left,ax,20);
|
||||||
|
}
|
||||||
|
grsim_put_sprite(tfv_led_sword,ax-5,20);
|
||||||
|
|
||||||
|
grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20);
|
||||||
|
|
||||||
|
page_flip();
|
||||||
|
|
||||||
|
ax-=1;
|
||||||
|
|
||||||
|
usleep(20000);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int victory_dance(void) {
|
||||||
|
|
||||||
|
int ax=34;
|
||||||
|
int i;
|
||||||
|
int saved_drawpage;
|
||||||
|
|
||||||
|
saved_drawpage=ram[DRAW_PAGE];
|
||||||
|
|
||||||
|
ram[DRAW_PAGE]=PAGE2; // 0xc00
|
||||||
|
|
||||||
|
clear_bottom();
|
||||||
|
|
||||||
|
vtab(21);
|
||||||
|
htab(10);
|
||||||
|
move_cursor();
|
||||||
|
print("EXPERIENCE +2");
|
||||||
|
experience+=2;
|
||||||
|
|
||||||
|
vtab(22);
|
||||||
|
htab(10);
|
||||||
|
move_cursor();
|
||||||
|
print("MONEY +1");
|
||||||
|
money+=1;
|
||||||
|
|
||||||
|
ram[DRAW_PAGE]=saved_drawpage;
|
||||||
|
|
||||||
|
for(i=0;i<50;i++) {
|
||||||
|
|
||||||
|
gr_copy_to_current(0xc00);
|
||||||
|
|
||||||
|
if (i&1) {
|
||||||
|
grsim_put_sprite(tfv_stand_left,ax,20);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
grsim_put_sprite(tfv_walk_left,ax,20);
|
||||||
|
}
|
||||||
|
|
||||||
|
page_flip();
|
||||||
|
|
||||||
|
usleep(100000);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int do_battle(void) {
|
int do_battle(void) {
|
||||||
|
|
||||||
int i,ch;
|
int i,ch;
|
||||||
|
|
||||||
int enemy_x=2;
|
int enemy_x=2;
|
||||||
|
int enemy_type=0;
|
||||||
int saved_drawpage;
|
int saved_drawpage;
|
||||||
//int enemy_hp=20;
|
int enemy_hp=0;
|
||||||
|
|
||||||
int tfv_x=34;
|
int ax=34;
|
||||||
|
|
||||||
// home();
|
/* Setup Enemy */
|
||||||
// gr();
|
// enemy_type=X
|
||||||
|
// ranom, with weight toward proper terrain
|
||||||
|
|
||||||
|
/* Setup Enemy HP */
|
||||||
|
enemy_hp=enemies[enemy_type].hp_base+
|
||||||
|
(rand()&enemies[enemy_type].hp_mask);
|
||||||
|
|
||||||
saved_drawpage=ram[DRAW_PAGE];
|
saved_drawpage=ram[DRAW_PAGE];
|
||||||
|
|
||||||
@ -75,7 +200,7 @@ int do_battle(void) {
|
|||||||
vtab(22);
|
vtab(22);
|
||||||
htab(1);
|
htab(1);
|
||||||
move_cursor();
|
move_cursor();
|
||||||
print("KILLER CRAB");
|
print(enemies[enemy_type].name);
|
||||||
|
|
||||||
vtab(21);
|
vtab(21);
|
||||||
htab(27);
|
htab(27);
|
||||||
@ -99,38 +224,29 @@ int do_battle(void) {
|
|||||||
print("/");
|
print("/");
|
||||||
print_byte(max_hp);
|
print_byte(max_hp);
|
||||||
|
|
||||||
|
/* Draw Limit break bargraph */
|
||||||
ram[COLOR]=0x20;
|
ram[COLOR]=0x20;
|
||||||
hlin_double(ram[DRAW_PAGE],33,33+limit,42);
|
hlin_double(ram[DRAW_PAGE],33,33+limit,42);
|
||||||
|
|
||||||
// basic_htab(34);
|
|
||||||
// basic_vtab(22);
|
|
||||||
// basic_inverse();
|
|
||||||
// for(i=0;i<limit;i++) {
|
|
||||||
// basic_print(" ");
|
|
||||||
// }
|
|
||||||
// basic_normal();
|
|
||||||
// for(i=limit;i<5;i++) {
|
|
||||||
// basic_print(" ");
|
|
||||||
// }
|
|
||||||
|
|
||||||
ram[COLOR]=0xa0;
|
ram[COLOR]=0xa0;
|
||||||
hlin_double_continue(5-limit);
|
hlin_double_continue(5-limit);
|
||||||
|
|
||||||
|
/* Draw inverse separator */
|
||||||
ram[COLOR]=0x20;
|
ram[COLOR]=0x20;
|
||||||
|
|
||||||
// basic_inverse();
|
|
||||||
for(i=40;i<50;i+=2) {
|
for(i=40;i<50;i+=2) {
|
||||||
hlin_double(ram[DRAW_PAGE],12,12,i);
|
hlin_double(ram[DRAW_PAGE],12,12,i);
|
||||||
// basic_vtab(i);
|
|
||||||
// basic_htab(13);
|
|
||||||
// basic_print(" ");
|
|
||||||
}
|
}
|
||||||
//basic_normal();
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Draw background */
|
||||||
|
|
||||||
|
/* Draw sky */
|
||||||
color_equals(COLOR_MEDIUMBLUE);
|
color_equals(COLOR_MEDIUMBLUE);
|
||||||
for(i=0;i<10;i++) {
|
for(i=0;i<10;i++) {
|
||||||
hlin_double(ram[DRAW_PAGE],0,39,i);
|
hlin_double(ram[DRAW_PAGE],0,39,i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Draw ground */
|
||||||
|
/* FIXME: base on map location */
|
||||||
color_equals(COLOR_LIGHTGREEN);
|
color_equals(COLOR_LIGHTGREEN);
|
||||||
for(i=10;i<40;i++) {
|
for(i=10;i<40;i++) {
|
||||||
hlin_double(ram[DRAW_PAGE],0,39,i);
|
hlin_double(ram[DRAW_PAGE],0,39,i);
|
||||||
@ -142,17 +258,24 @@ int do_battle(void) {
|
|||||||
|
|
||||||
gr_copy_to_current(0xc00);
|
gr_copy_to_current(0xc00);
|
||||||
|
|
||||||
grsim_put_sprite(tfv_stand_left,tfv_x,20);
|
grsim_put_sprite(tfv_stand_left,ax,20);
|
||||||
grsim_put_sprite(tfv_led_sword,tfv_x-5,20);
|
grsim_put_sprite(tfv_led_sword,ax-5,20);
|
||||||
|
|
||||||
grsim_put_sprite(killer_crab,enemy_x,20);
|
grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20);
|
||||||
|
|
||||||
page_flip();
|
page_flip();
|
||||||
|
|
||||||
ch=grsim_input();
|
ch=grsim_input();
|
||||||
if (ch=='q') break;
|
if (ch=='q') break;
|
||||||
|
|
||||||
|
if (ch==' ') enemy_hp-=attack(enemy_x,enemy_type);
|
||||||
|
|
||||||
usleep(100000);
|
usleep(100000);
|
||||||
|
|
||||||
|
if (enemy_hp<0) {
|
||||||
|
victory_dance();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ram[DRAW_PAGE]=PAGE0;
|
ram[DRAW_PAGE]=PAGE0;
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
TEMPY = $FB
|
TEMPY = $FB
|
||||||
|
|
||||||
HGR = $F3E2
|
HGR = $F3E2
|
||||||
|
HPLOT0 = $F457
|
||||||
|
HCOLOR = $F6EC
|
||||||
HLINE = $F819
|
HLINE = $F819
|
||||||
VLINE = $F828
|
VLINE = $F828
|
||||||
COLOR = $F864
|
COLOR = $F864
|
||||||
@ -14,24 +16,43 @@
|
|||||||
jsr TEXT
|
jsr TEXT
|
||||||
jsr HOME
|
jsr HOME
|
||||||
|
|
||||||
;30 HPLOT 0,Y TO X,Y:RETURN
|
|
||||||
|
|
||||||
jsr HGR
|
jsr HGR
|
||||||
lda #0
|
lda #0
|
||||||
sta $C052 ; POKE - 16302,0
|
sta $C052 ; POKE - 16302,0
|
||||||
;X=279
|
|
||||||
;80 HCOLOR= 4:HPLOT 0,0
|
ldx #4
|
||||||
|
jsr HCOLOR ; HCOLOR= 4
|
||||||
|
ldx #0
|
||||||
|
ldy #0
|
||||||
|
lda #0
|
||||||
|
jsr HPLOT0 ; HPLOT 0,0
|
||||||
|
|
||||||
jsr $F3F6 ; CALL 62454
|
jsr $F3F6 ; CALL 62454
|
||||||
; BGND, fill screen with color
|
; BGND, fill screen with color
|
||||||
|
|
||||||
;90 HCOLOR= 2:Y=63:GOSUB 30:Y=62:GOSUB 30
|
ldx #2
|
||||||
;100 HCOLOR= 6:Y=61:GOSUB 30:Y=60:GOSUB 30
|
jsr HCOLOR ; HCOLOR= 2
|
||||||
;110 HCOLOR= 1:Y=59:GOSUB 30:Y=58:GOSUB 30
|
;HPLOT 0,63 TO 279,63:RETURN
|
||||||
;120 HCOLOR= 5:Y=55:GOSUB 30:Y=54:GOSUB 30
|
;HPLOT 0,62 TO 279,62:RETURN
|
||||||
;C=100
|
ldx #6
|
||||||
;130 HCOLOR= 0:X=C
|
jsr HCOLOR ; HCOLOR= 6
|
||||||
;140 Y=123:GOSUB 30:Y=122:GOSUB 30
|
;HPLOT 0,61 TO 279,61:RETURN
|
||||||
;150 Y=119:GOSUB 30:Y=118:GOSUB 30
|
;HPLOT 0,60 TO 279,60:RETURN
|
||||||
|
ldx #1
|
||||||
|
jsr HCOLOR ; HCOLOR= 1
|
||||||
|
;HPLOT 0,59 TO 279,59:RETURN
|
||||||
|
;HPLOT 0,58 TO 279,58:RETURN
|
||||||
|
ldx #5
|
||||||
|
jsr HCOLOR ; HCOLOR= 5
|
||||||
|
;HPLOT 0,55 TO 279,55:RETURN
|
||||||
|
;HPLOT 0,54 TO 279,54:RETURN
|
||||||
|
ldx #0
|
||||||
|
jsr HCOLOR ; HCOLOR= 0
|
||||||
|
;HPLOT 0,123 TO 100,123:RETURN
|
||||||
|
;HPLOT 0,122 TO 100,122:RETURN
|
||||||
|
;HPLOT 0,119 TO 100,119:RETURN
|
||||||
|
;HPLOT 0,118 TO 100,118:RETURN
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
jsr COLOR ; COLOR= 0
|
jsr COLOR ; COLOR= 0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user