Ok about your first question:
What you need is a variable which represents the number of items you have to collect.
This var is shown by a panel (digits element) and if you touch one of these items the number is decreased, then you do a check if its == 0 and load the next level.
Code:
font arial_16b = "Arial",1,16;
var nro_items = 5; //you have to reset this var after level change
panel item_pan
{
pos_x = 20;
pos_y = 10;
layer = 5;
digits = 0,0,2,arial_16b,1,nro_items;
flags = visible;
}
//this functions checks the nro_items var
function check_nro_items()
{
if(!nro_items) //if nro_items == 0
{
//load your next level here
}
}
function item_events()
{
//if it was hit by an entity + it was the player
if((event_type == event_impact || event_type == event_entity) && you == player)
{
my.event = null; //do not react to events anymore
my.skill99 = 1; //set the "kill" skill99 to 1
}
}
action item_act
{
my.enable_impact = on; //make it sensible for hits
my.enable_entity = on;
my.event = item_events; //item_events is our event function
my.skill99 = 0; //set skill99 to 0
while(!my.skill99) { wait(1); } //wait until skill99 is != 0
my.invisible = on; //set to invisible
my.passable = on; //set to passable
wait(1); //wait a frame (just for safety)
nro_items -= 1; //decrease the item nr the player has to collect
check_nro_items(); //check if he is already done
ent_remove(me); //remove me
}
Ok now about your second problem:
I dunno which version of 3DGS you are using? latest A6 or A5?