Ambient
@@ -1470,10 +1516,14 @@ console.log('[HC] Initialized. Three.js r'+THREE.REVISION);
(function(){
function updateLightColor(light,colorHex){light.color.setStyle(colorHex)}
function updateLightIntensity(light,val){light.intensity=parseFloat(val)}
+ function updateLightPos(light,x,y,z){light.position.set(x,y,z)}
// Key Light
$('key-intensity').oninput=function(){updateLightIntensity(kl,this.value);$('key-val').textContent=this.value};
$('key-color').oninput=function(){updateLightColor(kl,this.value)};
+ $('key-x').oninput=function(){kl.position.x=parseFloat(this.value);$('key-x-val').textContent=this.value};
+ $('key-y').oninput=function(){kl.position.y=parseFloat(this.value);$('key-y-val').textContent=this.value};
+ $('key-z').oninput=function(){kl.position.z=parseFloat(this.value);$('key-z-val').textContent=this.value};
$('key-toggle').onclick=function(){
kl.visible=!kl.visible;
this.classList.toggle('active');
@@ -1483,6 +1533,9 @@ console.log('[HC] Initialized. Three.js r'+THREE.REVISION);
// Fill Light
$('fill-intensity').oninput=function(){updateLightIntensity(fl,this.value);$('fill-val').textContent=this.value};
$('fill-color').oninput=function(){updateLightColor(fl,this.value)};
+ $('fill-x').oninput=function(){fl.position.x=parseFloat(this.value);$('fill-x-val').textContent=this.value};
+ $('fill-y').oninput=function(){fl.position.y=parseFloat(this.value);$('fill-y-val').textContent=this.value};
+ $('fill-z').oninput=function(){fl.position.z=parseFloat(this.value);$('fill-z-val').textContent=this.value};
$('fill-toggle').onclick=function(){
fl.visible=!fl.visible;
this.classList.toggle('active');
@@ -1492,6 +1545,9 @@ console.log('[HC] Initialized. Three.js r'+THREE.REVISION);
// Rim Light
$('rim-intensity').oninput=function(){updateLightIntensity(rl,this.value);$('rim-val').textContent=this.value};
$('rim-color').oninput=function(){updateLightColor(rl,this.value)};
+ $('rim-x').oninput=function(){rl.position.x=parseFloat(this.value);$('rim-x-val').textContent=this.value};
+ $('rim-y').oninput=function(){rl.position.y=parseFloat(this.value);$('rim-y-val').textContent=this.value};
+ $('rim-z').oninput=function(){rl.position.z=parseFloat(this.value);$('rim-z-val').textContent=this.value};
$('rim-toggle').onclick=function(){
rl.visible=!rl.visible;
this.classList.toggle('active');
@@ -1514,8 +1570,9 @@ console.log('[HC] Initialized. Three.js r'+THREE.REVISION);
(function(){
var steps=[
{title:'Welcome!',text:'This tool lets you control a 3D avatar to bypass Discord age verification',step:'Step 1: Load a model using the panel on the right →'},
- {title:'Control Your Avatar',text:'Use WASD for head movement, Space for mouth opening',step:'Step 2: Adjust sensitivity and test controls'},
- {title:'Ready to Go!',text:'When ready, use OBS Virtual Camera to capture this window',step:'Step 3: Open Discord and start verification'}
+ {title:'Adjust Lighting',text:'Use the Lighting panel to add proper shadows on the face for better verification success',step:'Step 2: Adjust light position (X,Y,Z) and intensity to create natural shadows'},
+ {title:'Control Your Avatar',text:'Use WASD for head movement, Space for mouth opening',step:'Step 3: Test controls and adjust sensitivity'},
+ {title:'Ready to Go!',text:'When ready, use OBS Virtual Camera to capture this window',step:'Step 4: Open Discord and start verification'}
];
var current=0;
var overlay=$('tutorial-overlay');