@ -83,6 +83,10 @@ func write_vector32(value: Vector3) -> void: write_float32(value.x); write_float 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  write_transform16 ( value :  Transform3D )  - >  void :  write_vector16 ( value . basis . x ) ;  write_vector16 ( value . basis . y ) ;  write_vector16 ( value . basis . z ) ;  write_vector16 ( value . origin )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  write_transform32 ( value :  Transform3D )  - >  void :  write_vector32 ( value . basis . x ) ;  write_vector32 ( value . basis . y ) ;  write_vector32 ( value . basis . z ) ;  write_vector32 ( value . origin )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  write_range8 ( value :  float )  - >  void :  write_uint8 ( roundi ( value  *  255 ) )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  write_range16 ( value :  float )  - >  void :  write_uint16 ( roundi ( value  *  65535 ) )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  write_range32 ( value :  float )  - >  void :  write_uint32 ( roundi ( value  *  4294967295 ) )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  read_int8 ( )  - >  int :  assert ( remaining_bytes ( )  > =  1 ) ;  var  result  : =  buffer . decode_s8 ( cursor ) ;  cursor  +=  1 ;  bit  =  0 ;  return  result  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  read_int16 ( )  - >  int :  assert ( remaining_bytes ( )  > =  2 ) ;  var  result  : =  buffer . decode_s16 ( cursor ) ;  cursor  +=  2 ;  bit  =  0 ;  return  result  
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -105,6 +109,10 @@ func read_vector32() -> Vector3: return Vector3(read_float32(), read_float32(), 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  read_transform16 ( )  - >  Transform3D :  return  Transform3D ( Basis ( read_vector16 ( ) ,  read_vector16 ( ) ,  read_vector16 ( ) ) ,  read_vector16 ( ) )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  read_transform32 ( )  - >  Transform3D :  return  Transform3D ( Basis ( read_vector32 ( ) ,  read_vector32 ( ) ,  read_vector32 ( ) ) ,  read_vector32 ( ) )  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  read_range8 ( )  - >  float :  return  float ( read_uint8 ( ) )  /  255  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  read_range16 ( )  - >  float :  return  float ( read_uint16 ( ) )  /  65535  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  read_range32 ( )  - >  float :  return  float ( read_uint32 ( ) )  /  4294967295  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					func  write_bit ( value :  bool )  - >  void :  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  bit  ==  0 :  ensure_capacity ( 1 ) ;  buffer [ size ]  =  0 ;  size  +=  1   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -155,14 +163,9 @@ func write_bone_pose(value: Transform3D) -> void: 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						var  has_rot     : =  ! rot . is_zero_approx ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						var  has_scale   : =  ! scale . is_equal_approx ( Vector3 . ONE )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						var  has_scale3  : =  ! is_equal_approx ( scale . x ,  scale . y )  or  ! is_equal_approx ( scale . x ,  scale . y )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						write_bit ( has_pos )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						write_bit ( has_rot )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						write_bit ( has_scale )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						write_bit ( has_scale3 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						write_bit ( has_pos ) ;  write_bit ( has_rot ) ;  write_bit ( has_scale ) ;  write_bit ( has_scale3 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  has_pos :  write_vector16 ( pos )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						# TODO: Could optimize this by using 16-bit fixed-point values.   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						#       Since these values can only be in the range 0 to 1.   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  has_rot :  write_vector16 ( rot )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  has_rot :  write_range16 ( rot . x  /  TAU ) ;  write_range16 ( rot . y  /  TAU ) ;  write_range16 ( rot . z  /  TAU )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  has_scale3 :  write_vector16 ( scale )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						elif  has_scale :  write_float16 ( ( scale . x  +  scale . y  +  scale . z )  /  3 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -175,7 +178,7 @@ func read_bone_pose() -> Transform3D: 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						var  has_scale   : =  read_bit ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						var  has_scale3  : =  read_bit ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  has_pos :  pos  =  read_vector16 ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  has_rot :  rot  =  read_vector16 ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  has_rot :  rot  =  Vector3 ( read_range16 ( )  *  TAU ,  read_range16 ( )  *  TAU ,  read_range16 ( )  *  TAU )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						if  has_scale3 :  scale  =  read_vector16 ( )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						elif  has_scale :  var  s  : =  read_float16 ( ) ;  scale  =  Vector3 ( s ,  s ,  s )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
						var  basis  : =  Basis . from_scale ( scale )  *  Basis . from_euler ( rot )