OK...so i did some testing. When I did a bmap_preload like you suggested Uhrwerk, the bitmaps both had red crosses on them. The only reason I was seeing one with and one without was because of, like you said, the way Gamestudios caches bitmaps.

Thing is, Mr. Guest got my curiosity up, so i kept at it. I knew memcpy could work. Heres what I came up with:

Code:
//////////////////////////////////////////////////////////////////////
// test.c

#include <acknex.h>
#include <default.c>
#include "headers.h"

#define PRAGMA_PATH "Graphics\Item Icons"
#define PRAGMA_PATH "Models"

FONT* standard_font = "ackfont.pcx";

BMAP* bmp_original = "jug_icon.tga";
BMAP* bmp_clone = "jug_icon.tga";

PANEL* pnl_original = {
	pos_x = 0;
	pos_y = 40;
	flags = SHOW;
}

PANEL* pnl_clone = {
	pos_x = 64;
	pos_y = 40;
	flags = SHOW;
}

PANEL* info_panel =
{   pos_x = 20;
    pos_y = 20;
    flags = SHOW;
    digits = 0,0,3.0,standard_font,1,test;
    digits = 0,10,3.0,standard_font,1,test2;
}

void bmap_cross(){
	
	BMAP* tgablitz = pnl_original.bmap;
	var format; 
	var pixel;
	format = bmap_lock(tgablitz,0);
	if (format >= 565) {
		pixel = pixel_for_vec(vector(0,0,255),100,format); // red color
		pixel_to_bmap(tgablitz,10,10,pixel);
		pixel_to_bmap(tgablitz,10,11,pixel);
		pixel_to_bmap(tgablitz,10,12,pixel);
		pixel_to_bmap(tgablitz,10,13,pixel);
		pixel_to_bmap(tgablitz,10,14,pixel);
		pixel_to_bmap(tgablitz,8,12,pixel);
		pixel_to_bmap(tgablitz,9,12,pixel);
		pixel_to_bmap(tgablitz,11,12,pixel);
		pixel_to_bmap(tgablitz,12,12,pixel);
	}
	bmap_unlock(tgablitz);
}

BMAP *bmap_copy(BMAP* bmp)
{   BMAP* bmpNew = bmap_createblack(1,1,24);
    bmpNew.width = bmp.width;
    bmpNew.height = bmp.height;
    bmpNew.bytespp = bmp.bytespp;
    bmpNew.flags = bmp.flags;
    bmpNew.u1 = bmp.u1;
    bmpNew.v1 = bmp.v1;
    bmpNew.u2 = bmp.u2;
    bmpNew.v2 = bmp.v2;
    bmpNew.u = bmp.u;
    bmpNew.v = bmp.v;
    bmpNew.refcount = bmp.refcount;
    bmpNew.finalwidth = bmp.finalwidth;
    bmpNew.finalheight = bmp.finalheight;
    bmpNew.finalbytespp = bmp.finalbytespp;
    bmpNew.pitch = bmp.pitch;
    bmpNew.finalpitch = bmp.finalpitch;
    bmpNew.miplevels = bmp.miplevels;
    bmpNew.finalformat = bmp.finalformat;
    bmpNew.finalbits = NULL;
    bmpNew.d3dtex = NULL;
    bmpNew.pixels = malloc((bmp.width*bmp.height)*bmp.bytespp);
    memcpy(bmpNew.pixels, bmp.pixels, (bmp.width*bmp.height)*bmp.bytespp);
    return(bmpNew);
}

void main()
{   wait(1);
    bmap_preload(bmp_original);
    bmp_clone = bmap_copy(bmp_original);
    pnl_original.bmap = bmp_original;
    pnl_clone.bmap = bmp_clone;
    bmap_cross();
    test = bmp_original.link.index;
    test2 = bmp_clone.link.index;
}



Instead of using memcpy to copy the BMAP, i use memcpy to copy the bmap pixels. As you can see, i did a bmap_preload so im not getting any cached bmaps. I checked bmp_original.link.index and bmp_clone.link.index and they are different numbers, so the two bmaps are unique. When I ran the code, i got one bmap with a red cross and one without.

the only problem the code has is that i get an "invalid pointer freed" error message when I exit the game.

Quote:

Seriously: Several experienced forum members warned you not to mess up with internal engine data and you did it anyways and got results you we're not able to understand. Does that ring a bell for you?


I mess with stuff im not supposed to all the time. Its how I learn. As well - when I am messing with stuff I dont fully understand - I gnerally do it in a test enviroment where I can blow things up all day long with no harm done.

In the future, I will avoid asking "why didnt that work?" style questions like I did in the later posts of this thread. You should come to the boards with "How do I...?" style questions or with answers. I apologize for violating board etiquette the way i did.