21 July 2013, 19:44 | #1 |
Registered User
Join Date: May 2009
Location: Leicester/U.K
Posts: 36
|
Background Image and Bobs!!
Hi all,
I'm tying to do a port of a simple game i made for windows to an amiga. Its just a simple simon type of game, where you have to remember the sequence of flahing lights. At the minute im just trying to build the framework for the game. All is going well except when I draw a bob, the background image colours show through the bobs image. If I draw the bob on its own it's displayed as i intend it to be.The bob was drawn using the same palette as the backgrounds. Does Anyone have any ideas why this might be happening? Thanks. |
21 July 2013, 21:11 | #2 |
2 contact me: email only!
Join Date: May 2001
Location: Auckland / New Zealand
Posts: 3,187
|
What language are you using? It sounds like you are not blitting each bitplane or have the minterms set incorrectly. Pasting a code sample will definitely help.
|
22 July 2013, 04:25 | #3 |
Registered User
Join Date: May 2009
Location: Leicester/U.K
Posts: 36
|
Hi Codetrapper.
Sorry, I forget to mention that Im using mostly c wrapped up in c++ classes and using hisoft c++ for the compiler. The code is a bit messy as its mostly snippets from various tutorials from the net. Anyway, Thanks for your reply. Heres the code: GameEngine::GameEngine() { m_Cia = (struct CIA *) CIAAPRA; m_NumOfColours = LORES_COLOURS; m_Depth = 5; m_Width = 320; m_Height = 256; m_RastWidth = ((m_Width)*(2));//? m_RastHeight = ((m_Height)*(2));//? m_PosX = 0; m_PosY = 0; m_Run = FALSE; m_MousePosX = 0; m_MousePosY = 0; // Default colours m_ColourTable[0]=0x000; /* Colour 0, Black */ m_ColourTable[1]=0x800; /* Colour 1, Red */ m_ColourTable[2]=0xF00; /* Colour 2, Light red */ m_ColourTable[3]=0x080; /* Colour 3, Green */ m_ColourTable[4]=0x0F0; /* Colour 4, Light green */ m_ColourTable[5]=0x008; /* Colour 5, Blue */ m_ColourTable[6]=0x00F; /* Colour 6, Light Blue */ m_ColourTable[7]=0xFFF; /* Colour 7, White */ } //************************************* GameEngine::~GameEngine() { //CleanUp(); } //************************************* void GameEngine::Start() { //************************************* WORD Sbuffer[4*40*3]; // ? WORD Cmask[4*40]; // ? WORD Bline[4]; // ? WORD *d = (WORD*)&bbfData; struct VSprite v = { NULL, // Struct VSprite *NextSprite NULL, // Struct VSprite *PrevSprite NULL, // Struct VSprite *DrawPath NULL, // Struct VSprite *ClearPath 0, // WORD OldY 0, // WORD OldX 0, // WORD Flags 60, // WORD Y 10, // WORD X 41, // WORD Height 4, // WORD Width 2, // WORD Depth 1, // WORD MeMask 1, // WORD HitMask (WORD*)bbfData, // WORD *ImageData &Bline[0], // WORD* BorderLine &Cmask[0], // WORD* CollMask (WORD*)&BackGround3PaletteRGB32, // WORD* SprColors NULL, // struct Bob* VSBob 0x0019, // BYTE PlanePick 0x0000, // BYTE PlaneOnOff NULL // VUserStuff VUserExt }; struct Bob b = { SAVEBACK | OVERLAY, &Sbuffer[0], &Cmask[0], NULL,NULL, &v, NULL,NULL,NULL }; struct VSprite s1,s2; struct GelsInfo gelsinfo; struct collTable Ctable; //WORD dx,dy,x; gelsinfo.nextLine = NULL; gelsinfo.lastColor = NULL; gelsinfo.collHandler = &Ctable; InitGels(&s1,&s2,&gelsinfo); m_RastPort.GelsInfo = &gelsinfo; v.VSBob = &b; InitMasks(&v); AddBob(&b,&m_RastPort); UBYTE value = 0, old_value = 0; BYTE dx=0, dy=0; m_Run = TRUE; LoadRGB32(&m_ViewPort,BackGround3PaletteRGB32); MakeVPort( &m_View, &m_ViewPort ); DrawImage( &m_RastPort, &BackGround3, 0,0 ); while(m_Run) { old_value = value; value = GetMouse( (UBYTE)MOUSE_PORT, &dx, &dy ); if( value != old_value ) { if( value & LEFT_BUTTON ) SetRun(FALSE); LoadView( m_OldView ); CleanUp(); if( value & RIGHT_BUTTON ) { SetRun(FALSE); LoadView( m_OldView ); CleanUp(); } } MrgCop( &m_View ); LoadView( &m_View ); SortGList(&m_RastPort); DrawGList(&m_RastPort,&m_ViewPort); WaitTOF(); } } //************************************* void GameEngine::CleanUp() { int loop; /* Free automatically allocated display structures: */ FreeVPortCopLists( &m_ViewPort ); FreeCprList( m_View.LOFCprList ); /* Deallocate the display memory, BitPlane for BitPlane: */ for( loop = 0; loop < m_Depth; loop++ ) if( m_BitMap.Planes[ loop ] ) FreeRaster( m_BitMap.Planes[ loop ], m_RastWidth, m_RastHeight ); /* Deallocate the ColorMap: */ if( m_ViewPort.ColorMap ) FreeColorMap( m_ViewPort.ColorMap ); /* Close the Graphics library: */ // If the GfxBase library is open, close it. if (m_GfxBase) { CloseLibrary( (struct Library *)m_GfxBase); } if (m_IntuitionBase) { CloseLibrary( (struct Library *)m_IntuitionBase); } exit(0); } //************************************* BOOL GameEngine::Initialize() { BOOL result = TRUE; UWORD *pointer; int loop; /* Open the Intuition library: */ m_IntuitionBase = (struct IntuitionBase *)OpenLibrary( "intuition.library", 0L ); if( !m_IntuitionBase ) { printf( "Could NOT open the Intuition library!" ); result = FALSE; } /* Open the Graphics library: */ m_GfxBase = (struct GfxBase *)OpenLibrary( "graphics.library", 0 ); if( !m_GfxBase ) { printf( "Could NOT open the Graphics library!" ); result = FALSE; } if(result) { /* Save the current View, so we can restore it later: */ m_OldView = m_GfxBase->ActiView; /* 1. Prepare the View structure, and give it a pointer to */ /* the first ViewPort: */ InitView( &m_View ); m_View.ViewPort = &m_ViewPort; /* 2. Prepare the ViewPort structure, and set some important values: */ InitVPort( &m_ViewPort ); m_ViewPort.DWidth = m_Width; /* Set the width. */ m_ViewPort.DHeight = m_Height; /* Set the height. */ m_ViewPort.DxOffset = m_PosX; /* Set the display X offset. */ m_ViewPort.DyOffset = m_PosY; /* Set the display Y offset. */ m_ViewPort.RasInfo = &m_RasInfo; /* Give it a pointer to RasInfo. */ m_ViewPort.Modes = NULL; /* Low resolution. */ /* 3. Get a colour map, link it to the ViewPort, and prepare it: */ m_ViewPort.ColorMap = (struct ColorMap *) GetColorMap( m_NumOfColours ); if( m_ViewPort.ColorMap == NULL ) printf( "Could NOT get a ColorMap!" ); /* Get a pointer to the colour map: */ pointer = (UWORD *) m_ViewPort.ColorMap->ColorTable; /* Set the colours: */ for( loop = 0; loop < m_NumOfColours; loop++ ) *pointer++ = m_ColourTable[ loop ]; /* 4. Prepare the BitMap: */ InitBitMap( &m_BitMap, m_Depth, m_RastHeight, m_RastWidth ); /* Allocate memory for the Raster: */ for( loop = 0; loop < m_Depth; loop++ ) { m_BitMap.Planes[ loop ] = (PLANEPTR) AllocRaster( m_RastWidth, m_RastHeight ); if( m_BitMap.Planes[ loop ] == NULL ) printf( "Could NOT allocate enough memory for the raster!" ); /* Clear the display memory with help of the Blitter: */ BltClear( m_BitMap.Planes[ loop ], RASSIZE( m_RastWidth, m_RastHeight ), 0); } /* 5. Prepare the RasInfo structure: */ m_RasInfo.BitMap = &m_BitMap; /* Pointer to the BitMap structure. */ m_RasInfo.RxOffset = 0; /* The top left corner of the Raster */ m_RasInfo.RyOffset = 0; /* should be at the top left corner */ /* of the display. */ m_RasInfo.Next = NULL; /* Single playfield - only one */ /* 6. Create the display: */ MakeVPort( &m_View, &m_ViewPort ); MrgCop( &m_View ); /* 7. Prepare the RastPort, and give it a pointer to the BitMap. */ InitRastPort( &m_RastPort ); m_RastPort.BitMap = &m_BitMap; } else { CleanUp(); } return result; } |
29 July 2013, 11:22 | #4 |
Natteravn
Join Date: Nov 2009
Location: Herford / Germany
Posts: 2,555
|
I have never used the graphics.library GELs system myself, but are you sure that the PlanePick/PlaneOnOff fields are correct? As far as I understand it will only draw plane 0, 3 and 4 and fill the rest with zero?
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Workbench background image? | Fingerlickin_B | project.ClassicWB | 9 | 26 September 2021 00:47 |
Blitter Objects (bobs) | Lonewolf10 | Coders. Tutorials | 3 | 22 February 2013 22:24 |
FS: A4000/30 plus bits and bobs | Interceptor | MarketPlace | 0 | 22 October 2011 22:52 |
FS: Various bits n bobs | jujasi | MarketPlace | 0 | 12 July 2009 19:13 |
Bobs Garden | Big-Byte | Amiga scene | 7 | 26 October 2002 11:24 |
|
|