
-Thom
Moderator: Moderators
Code: Select all
#pragma bssseg (push,"ZEROPAGE")
extern unsigned char spr,i,frame_cnt;
#pragma bssseg (pop)
Code: Select all
ld65.exe: Warning: Address size mismatch for `_frame_cnt': Exported from wow.o, wow.s(25) as `zeropage', import in attract_monsters.o, attract_monsters.s(31) as `absolute'
ld65.exe: Warning: Address size mismatch for `_i': Exported from wow.o, wow.s(18) as `zeropage', import in attract_monsters.o, attract_monsters.s(30) as `absolute'
ld65.exe: Warning: Address size mismatch for `_spr': Exported from wow.o, wow.s(24) as `zeropage', import in attract_monsters.o, attract_monsters.s(29) as `absolute'
Code: Select all
extern unsigned char spr;
#pragma zpsym("spr")
extern unsigned char i;
#pragma zpsym("i")
extern unsigned char frame_cnt;
#pragma zpsym("frame_cnt")
Code: Select all
void monster_shoot(void)
{
// This is holy shit naive. The previous naive implementation took too much CPU time.
if (rand8()>0xC0)
{
if (((rand8())<0x08) && lasers[LASER_SHOOTING(i)]==0 && monster_laser_count<4)
{
monster_laser_fire(i);
}
}
if (lasers[LASER_SHOOTING(i)]==1)
{
get_current_laser_box();
if (lasers[LASER_DIRECTION(i)]==STATE_MONSTER_RIGHT)
{
if (BOX_WALL_RIGHT(h) && lasers[LASER_X(i)]==PIXEL_BOX_X(e))
monster_laser_stop(i);
else
lasers[LASER_X(i)]+=4;
}
else if (lasers[LASER_DIRECTION(i)]==STATE_MONSTER_LEFT)
{
if (BOX_WALL_LEFT(h) && lasers[LASER_X(i)]==PIXEL_BOX_X(e))
monster_laser_stop(i);
else
lasers[LASER_X(i)]-=4;
}
else if (lasers[LASER_DIRECTION(i)]==STATE_MONSTER_DOWN)
{
if (BOX_WALL_DOWN(h) && lasers[LASER_Y(i)]==PIXEL_BOX_Y(f))
monster_laser_stop(i);
else
lasers[LASER_Y(i)]+=4;
}
else if (lasers[LASER_DIRECTION(i)]==STATE_MONSTER_UP)
{
if (BOX_WALL_UP(h) && lasers[LASER_Y(i)]==PIXEL_BOX_Y(f))
monster_laser_stop(i);
else
lasers[LASER_Y(i)]-=4;
}
}
}
I will revisit that later. I'm guessing that sometime soon I will need to do some significant code optimization. If you want to see where things are @ this point, the code as always is in github: http://github.com/tschak909/wowlidnariq wrote:I'm curious about how you were losing so many cycles on just a bounds check ... maybe memory pointers ?