サンプル [hgimg4/tamane_face.hsp] を書き換えて、実験してみたスクリプトです。
[repeat]ボタンを押すと、ランダムの順番で、3Dモデルたちを読込みます。
かつ、3Dモデルのどれかをランダムで、書き換え対象とします。(=ID)
[FACE1,2,3]ボタンで、書き換え実行です。
書き換え対象の『ID』と実際に書き換えられた3Dモデルが、合っていたり、いなかったり。
はて?
#include "hgimg4.as"
chdir dir_exe+"\\sample\\hgimg4"
randomize
*go_repeat
	gpreset
	screen 0,700,480,, 100,100
	setcls CLSMODE_SOLID, $808080
	setcolor GPOBJ_LIGHT, 1,1,1		; ライトカラーを設定
	setdir GPOBJ_LIGHT, 0.5,0.5,0.5		; アンビエントカラーを設定
	;	ボタンを設置
	objsize 100,30
	button goto "repeat",*go_repeat
//	objsize 200,60
	button gosub "FACE1",*face1
	button gosub "FACE2",*face2
	button gosub "FACE3",*face3
junban=rnd(4)
if junban=0 : gosub *duck_L : gosub *duck_R : gosub *tamane2 : gosub *tamane2_R : gosub *tamane2_L
if junban=1 : gosub *duck_R : gosub *tamane2_L : gosub *tamane2 : gosub *duck_L : gosub *tamane2_R
if junban=2 : gosub *tamane2_L : gosub *duck_L : gosub *duck_R : gosub *tamane2_R : gosub *tamane2
if junban=3 : gosub *tamane2_R : gosub *duck_R : gosub *duck_L : gosub *tamane2_L : gosub *tamane2
goto *CAMERA
*duck_L
	gpload id_duck_L,"res/duck"		; モデル読み込み
	setscale id_duck_L, 3,3,3
	addpos id_duck_L, -5,0,0
	return
*duck_R
	gpload id_duck_R,"res/duck"		; モデル読み込み
	setscale id_duck_R, 3,3,3
	addpos id_duck_R, 5,0,0
	return
*tamane2
	gpload id_tamane2,"res/tamane2"		; モデル読み込み
	setscale id_tamane2, 0.1,0.1,0.1
	addpos id_tamane2, 0,0,0
	return
*tamane2_L
	gpload id_tamane2_L,"res/tamane2"		; モデル読み込み
	setscale id_tamane2_L, 0.1,0.1,0.1
	addpos id_tamane2_L, -10,0,0
	return
*tamane2_R
	gpload id_tamane2_R,"res/tamane2"		; モデル読み込み
	setscale id_tamane2_R, 0.1,0.1,0.1
	addpos id_tamane2_R, 10,0,0
	return
*CAMERA
	setpos GPOBJ_CAMERA, 0,20,40		; カメラ位置を設定
//	gpact id_tamane2
	nodename = "atama"			; テクスチャを入れ替えるノード名
	;	特定のノードに割り当てられたマテリアルを取り出す
	id=rnd(6)
	gpnodeinfo id_proxymat,id, GPNODEINFO_MATERIAL, "atama"
repeat
	title "id_duck_L= "+id_duck_L+"        id_duck_R= "+id_duck_R+"        id_tamane2_L= "+id_tamane2_L+"        id_tamane2= "+id_tamane2+"        d_tamane2_R= "+id_tamane2_R
	stick key,15
	if key&128 : end
	redraw 0			; 描画開始
	gplookat GPOBJ_CAMERA, 0,11,0		; カメラから指定した座標を見る
	gpdraw				; シーンの描画
	font "",20,1 : color 0,255,0
	pos 110,70 : mes "id_tamane2_L= "+id_tamane2_L, mesopt_outline
	pos 270,40 : mes "id_tamane2= "+id_tamane2, mesopt_outline
	pos 430,70 : mes "id_tamane2_R= "+id_tamane2_R, mesopt_outline
	pos 210,380 : mes "id_duck_L= "+id_duck_L, mesopt_outline
	pos 370,380 : mes "id_duck_R= "+id_duck_R, mesopt_outline
	pos 30,410 : color 255,255,255
	mes "ID = "+id
	mes "gpnodeinfo id_proxymat, ID, GPNODEINFO_MATERIAL, ''atama''"
	redraw 1			; 描画終了
	await 1000/60			; 待ち時間
loop
*face1
	gpmatprmt id_proxymat, , "res/head_SD.png"
	return
*face2
	gpmatprmt id_proxymat, , "res/head_SD1.png"
	return
*face3
	gpmatprmt id_proxymat, , "res/head_SD2.png"
	return