#include "mapedit.h" #include "sprmap.h" PROGRAM_DATA program_data; DBUFFER *db,*dbp; LEVEL level,*levelp=(LEVEL *)LEVEL_ADDR; u_long level_size; SPRITE_DATA_INFO map_blocks_info; SprImgInfo texture_info[MAX_SPRITES]; SprHeader *sprite_header=(SprHeader *)SPRITE_ADDR; BACKGRND background; BRIGHTNESS b[]={{0x0,0x0,0x0},{0x80<>16; cursor.screen.vy=cursor.position.vy>>16; cursor.visible=1; cursor.active=1; sprite=&cursor.type.gss; SetGsSPRITE(sprite,TRANSPARENCY_ON,0,0,map_blocks_info.offsets[FIRST_MAP_BLOCK_SPRITE].w,map_blocks_info.offsets[FIRST_MAP_BLOCK_SPRITE].h, map_blocks_info.tpage,0,0,map_blocks_info.cx,map_blocks_info.cy,0xff,0xff,0xff,0,0,ONE,ONE,0); InitBackground(&map_blocks_info,&background,&r); background.rows=MAX_MAP_ROWS; level_size=(MAX_MAP_ROWS*MAX_MAP_COLUMNS)+LevelPblkSize+4; // Clear level buffer bzero(&level_buffer,MAX_MAP_COLUMNS*MAX_MAP_ROWS); SetObjectsBrightness(background.block,&b[1]); program_data.running=1; // Has a level been loaded for editing if(levelp->id==0x19971998) { // Find size of level background.rows=levelp->pblock.nrows; background.columns=levelp->pblock.nclms; background.no_diamonds=levelp->pblock.ndiamonds; // Copy level data memcpy(&level_buffer[0],&levelp->data,background.rows*background.columns); printf("Load Level : Rows=%03d Columns=%02d Diamonds=%03d\n",background.rows,background.columns,background.no_diamonds); } else printf("Load Level : Failed\n"); while(program_data.running) { program_data.buttons_down=AutoRepeat(program_data.pad,BUTTON_REPEAT_RATE); program_data.pad=PadRead(0); if(program_data.pad&PADselect) program_data.running=0; // Move up the level if(program_data.pad&PADup && !(program_data.buttons_down&PADup)) { if(row>0) { row--; cursor.screen.vy-=background.bh; if(cursor.screen.vy<0) { map_pos=MoveBackground(&background,UP); cursor.screen.vy=0; } } } // Move down the level if(program_data.pad&PADdown && !(program_data.buttons_down&PADdown)) { if(rowbackground.bh*(background.area.h-1)) { map_pos=MoveBackground(&background,DOWN); cursor.screen.vy=background.bh*(background.area.h-1); } } } // Move left if(program_data.pad&PADleft && !(program_data.buttons_down&PADleft)) { if(cursor.screen.vx>0) { cursor.screen.vx-=background.bw; column--; } } // Move right if(program_data.pad&PADright && !(program_data.buttons_down&PADright)) { if(cursor.screen.vx<(background.area.w-1)*background.bw) { cursor.screen.vx+=background.bw; column++; } } // Draw the current block at the cursor position if(program_data.pad&PADcross && !(program_data.buttons_down&PADcross)) { byte b=level_buffer[column+(row*background.area.w)]; level_buffer[column+(row*background.area.w)]=sprno; if(sprno>=FIRST_DIAMOND_MAP_BLOCK && sprno<=LAST_DIAMOND_MAP_BLOCK) background.no_diamonds++; if(b>=FIRST_DIAMOND_MAP_BLOCK && b<=LAST_DIAMOND_MAP_BLOCK) background.no_diamonds--; } // Delete the block at the cursor position if(program_data.pad&PADsquare && !(program_data.buttons_down&PADsquare)) { word b=level_buffer[column+(row*background.area.w)]; if(b>=FIRST_DIAMOND_MAP_BLOCK && b<=LAST_DIAMOND_MAP_BLOCK) background.no_diamonds--; level_buffer[column+(row*background.area.w)]=-1; } // Set all level to current block if(program_data.pad&PADcircle && !(program_data.buttons_down&PADcircle)) { memset(&level_buffer[0],sprno,MAX_MAP_ROWS*MAX_MAP_COLUMNS); background.no_diamonds=0; } // Change blocks if(program_data.pad&PADL1 && !(program_data.buttons_down&PADL1) && sprno>0) sprno--; if(program_data.pad&PADR1 && !(program_data.buttons_down&PADR1) && sprnox=cursor.screen.vx; sprite->y=cursor.screen.vy; sprite->u=map_blocks_info.offsets[sprno].u; sprite->v=map_blocks_info.offsets[sprno].v; sprite->cy=map_blocks_info.cy+map_blocks_info.offsets[sprno].clut_y; sprite->w=map_blocks_info.offsets[sprno].w; sprite->h=map_blocks_info.offsets[sprno].h; dbp=SwapBuffer(dbp,db); GsSetWorkBase(dbp->pb); GsClearOt(0,0,dbp->ot); SortObject(&cursor,dbp->ot,0); SortBackground(&background,dbp->ot,1); DrawSync(0); program_data.vsync=VSync(0); SwapDisplay(dbp); GsDrawOt(dbp->ot); FntPrint("Bouncer 2 Map Editor\n"); sprintf(string,"Row=%03d Column=%02d Diamonds=%03d\n",row,column,background.no_diamonds); FntPrint(string); FntPrint("Current block=%d\n",sprno); level_size=(background.rows*MAX_MAP_COLUMNS)+LevelPblkSize+4; sprintf(string,"Address=%x Size=%x\n",&level,level_size); FntPrint(string); FntPrint("Rows=%d Columns=%d\n",background.rows,background.columns); FntFlush(-1); } } CloseProgram(); return(0); }