you have to comment out the pitch and roll clamping in the input code.

On Mon, Mar 5, 2012 at 11:54 AM, Joel R. <joelru...@gmail.com> wrote:

> Try using my Quat class, it does the calculations differently, and is
> perfectly tuned for engine->SetViewAngles
>
>
>
> On Sun, Mar 4, 2012 at 8:48 PM, Craig Louie <craiglo...@gmail.com> wrote:
>
>> Considering my old log file further, it looks like the hitch is
>> definitely caused by the sudden switch from (yaw=0, roll=0) to (yaw=+/-180,
>> roll=+/-180).
>>
>>
>> 89.787949 0.000000 0.000000
>> 89.796173 0.000000 0.000000
>> 89.950935 -0.000000 0.000000
>> 89.989258 -0.000000 0.000000
>> 89.796158 180.000000 180.000000
>> 89.639793 -180.000000 -180.000000
>> 89.543274 180.000000 180.000000
>> 89.290382 -180.000000 -180.000000
>>
>> The QuaternionAngles() function will always produce QAngles with pitch
>> clamped between +/-90, therefore the yaw/roll values of +/-180 will always
>> occur as shown in the log above.
>> Example:
>> Pitch = 91; Yaw = 0; Roll = 0;
>> is equal to
>> Pitch = 89; Yaw = 180; Roll = 180;
>> These angles represent the point just past pitching straight down, when
>> the player is starting to flip upside down.
>>
>> It would then seem that to fix the hitch, I would have to either move the
>> entire engine away from using Euler Angles, or I would have to change the
>> motion blur system. These changes aren't really in the scope of my humble
>> mod. For now I will settle with turning off motion blur.
>>
>> Unfortunately, I have a more important gameplay bug that has been lurking
>> from the beginning. I haven't mentioned it until now. When I pitch
>> downwards towards the ground very, very slowly, the player stops pitching
>> right around pitch = 89, straight down. So just as the player is about to
>> look straight down, the slow downward pitch gets stuck (the bug also occurs
>> when looking straight up). This is what it looks like in the log:
>>
>> Pitch         Yaw        Roll         look_angle (this is the amount of
>> pitch being applied in a given frame)
>> 89.964256 0.000000 0.000000 -0.049802
>> 89.981636 0.000000 0.000000 -0.017369
>> 89.985939 0.000000 0.000000 -0.032433
>> 89.964264 0.000000 0.000000 -0.049802
>> 89.969955 0.000000 0.000000 -0.005686
>> 89.975136 0.000000 0.000000 -0.054909
>> 89.981659 0.000000 0.000000 -0.043205
>> 89.999550 0.000000 0.000000 -0.018781
>>
>> So for very small pitch increments, the player's rotation gets stuck when
>> the pitch nears 90 degrees (straight down). You can see the pitch values
>> fluctuating up and down over these several frames. Note, the pitch doesn't
>> get stuck with larger pitch increments, so it definitely has to do with the
>> small look_angle values.
>>
>> My initial theory was that there was some lingering pitch clamping
>> somewhere in the code, but I believe I have removed all instances of
>> clamping (Tony's article made a point of removing pitch clamping from
>> various places in the code).
>>
>> If anyone has any advice, I'd love to hear it.
>>
>> I also wanted to thank Saul, Minh, Joel and Tony for getting me this far.
>> You guys are awesome and I am really humbled by your generous advice.
>>
>> Thanks!
>>
>>
>>
>> On Sat, Mar 3, 2012 at 11:23 PM, Joel R. <joelru...@gmail.com> wrote:
>>
>>> I think I ran into a similar problem building the orientation state
>>> using AxisAngles.  I believe you have to first build the "default" state
>>> before you can multiply the (yaw/pitch/roll) quaternions.
>>>
>>>
>>> On Sun, Mar 4, 2012 at 12:31 AM, Craig Louie <craiglo...@gmail.com>wrote:
>>>
>>>> I've tried both Joel and Tony's methods, but I'm still unsure of how I
>>>> can escape the inherent aliasing problem of Euler Angles.
>>>>
>>>> With Joel's method, for instance, after I have used Slerp to get a
>>>> rotation quaternion, I still need to convert the resulting quaternion back
>>>> into Euler Angles (with QuaternionAngles()) because the Source engine
>>>> ultimately needs orientation in QAngle form when I call
>>>> engine->SetViewAngles(viewangles). Any thoughts on this?
>>>>
>>>> Also, I've learned more about the nature of the twisting hitch
>>>> experienced when looking straight up/down (this was my original problem).
>>>> When I turn off motion blur, the hitch isn't visible. My theory is that the
>>>> twisting hitch I am seeing is a result of the player's orientation twisting
>>>> at the instant the player looks straight up/down.
>>>>
>>>> Below is a part of a log showing the changes in viewangle as I pitch
>>>> down through pitch=90 (as shown in my youtube video).
>>>>
>>>> 88.025864 0.000000 0.000000
>>>> 88.136208 0.000000 0.000000
>>>> 88.278770 0.000000 0.000000
>>>> 88.421890 0.000000 0.000000
>>>> 88.531670 0.000000 0.000000
>>>> 88.683762 0.000000 0.000000
>>>> 88.784576 0.000000 0.000000
>>>> 88.976646 0.000000 0.000000
>>>> 89.037476 0.000000 0.000000
>>>> 89.261894 0.000000 0.000000
>>>> 89.290375 0.000000 0.000000
>>>> 89.522987 0.000000 0.000000
>>>> 89.543274 0.000000 0.000000
>>>> 89.787949 0.000000 0.000000
>>>> 89.796173 0.000000 0.000000
>>>> 89.950935 -0.000000 0.000000
>>>> 89.989258 -0.000000 0.000000
>>>> 89.796158 180.000000 180.000000
>>>> 89.639793 -180.000000 -180.000000
>>>> 89.543274 180.000000 180.000000
>>>> 89.290382 -180.000000 -180.000000
>>>> 89.266182 180.000000 180.000000
>>>> 89.037491 -180.000000 -180.000000
>>>> 88.784592 180.000000 180.000000
>>>> 88.531693 -180.000000 -180.000000
>>>> 88.334381 180.000000 180.000000
>>>> 88.278809 -180.000000 -180.000000
>>>> 88.025909 180.000000 180.000000
>>>>
>>>> The sudden yaw and roll change to +/-180 is probably what is causing
>>>> the hitch. The motion blur is creating a blur effect as if the player is
>>>> spinning for an instant. How to get around this, I am not sure.
>>>>
>>>>
>>>> Here's my current code in in_joystick.cpp's JoyStickMove() function:
>>>>
>>>> //###############################################################################
>>>>
>>>>     Vector vec_for, vec_rt, vec_up, vec_for_out, vec_rt_out, vec_up_out;
>>>>      Quaternion viewangles_q, turn_q, look_q, roll_q, qTemp, qDelta,
>>>> qResult, viewangles_q_out;
>>>>
>>>>     AngleVectors(viewangles, &vec_for, &vec_rt, &vec_up);
>>>>
>>>>     //Converting the current viewangles to a Quaternion (viewangles_q).
>>>>     RadianEuler viewangles_euler(viewangles);
>>>>     AngleQuaternion(viewangles_euler, viewangles_q);
>>>>
>>>>     //Build a set of quaternion transforms that rotate around
>>>> corresponding axes in local space by corresponding angles.
>>>>     // NOTE: non-unit vectors will bias the resulting rotation angle
>>>> (but not the axis)
>>>>
>>>>     VectorNormalize(vec_up);
>>>>     AxisAngleQuaternion(vec_up, turn_angle, turn_q);
>>>>     VectorNormalize(vec_rt);
>>>>     AxisAngleQuaternion(vec_rt, look_angle, look_q);
>>>>     VectorNormalize(vec_for);
>>>>     AxisAngleQuaternion(vec_for, roll_angle, roll_q);
>>>>
>>>>     //Combine Quaternions.
>>>>     QuaternionMult(look_q, turn_q, qTemp);
>>>>     QuaternionMult(qTemp, roll_q, qDelta);
>>>>
>>>>     //Slerp
>>>>     QuaternionSlerp(viewangles_q, qDelta, 1.0, qResult);
>>>>
>>>>     //Applying the Quaternion rotation.
>>>>     QuaternionMult(qResult, viewangles_q, viewangles_q_out);
>>>>
>>>>     //Converting Quaternion into a QAngle for
>>>> engine->SetViewAngles(viewangles_out)
>>>>     QAngle viewangles_out;
>>>>     QuaternionAngles(viewangles_q_out, viewangles_out);
>>>>
>>>>     COM_Log("viewangle_hitch.txt", "%2f %2f %2f \n", viewangles_out.x,
>>>> viewangles_out.y, viewangles_out.z);
>>>>
>>>>     if (viewangles_out[PITCH] > 180)
>>>>     {
>>>>         viewangles_out[PITCH] -= 360;
>>>>     }
>>>>     else if (viewangles_out[PITCH] < -180)
>>>>     {
>>>>         viewangles_out[PITCH] += 360;
>>>>     }
>>>>
>>>>     if (viewangles_out[YAW] > 180)
>>>>     {
>>>>         viewangles_out[YAW] -= 360;
>>>>     }
>>>>     else if (viewangles_out[YAW] < -180)
>>>>     {
>>>>         viewangles_out[YAW] += 360;
>>>>     }
>>>>
>>>>     if (viewangles_out[ROLL] > 180)
>>>>     {
>>>>         viewangles_out[ROLL] -= 360;
>>>>     }
>>>>     else if (viewangles_out[ROLL] < -180)
>>>>     {
>>>>         viewangles_out[ROLL] += 360;
>>>>     }
>>>>
>>>> //###############################################################################
>>>>
>>>>
>>>> Thanks!
>>>>
>>>>
>>>>
>>>> On Fri, Mar 2, 2012 at 12:40 AM, Craig Louie <craiglo...@gmail.com>wrote:
>>>>
>>>>> Thanks Tony and Joel for more awesome help. I didn't get as much time
>>>>> as I would have liked to work on it tonight. I will have to continue
>>>>> tomorrow night (and probably into the weekend). I'll keep the thread
>>>>> posted. Thanks!
>>>>>
>>>>> P.S. cool flight sim vid, Joel. Are you a fellow X-Wing/Tie Fighter
>>>>> fan? Freespace perhaps?
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Mar 1, 2012 at 10:29 PM, Joel R. <joelru...@gmail.com> wrote:
>>>>>
>>>>>> http://www.youtube.com/watch?v=5y6a_oFtNiI
>>>>>>
>>>>>>
>>>>>> On Thu, Mar 1, 2012 at 10:35 PM, Tony "omega" Sergi <
>>>>>> omegal...@gmail.com> wrote:
>>>>>>
>>>>>>> This actually will work in Source, as the input/view stuff is
>>>>>>> basically identical:
>>>>>>> http://articles.thewavelength.net/269/
>>>>>>> -Tony
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Mar 2, 2012 at 5:09 AM, Craig Louie <craiglo...@gmail.com>wrote:
>>>>>>>
>>>>>>>> Thanks Joel! I'll also try out your method when I get home. I'll
>>>>>>>> keep everyone posted on my results.
>>>>>>>>
>>>>>>>> Thanks!
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Mar 1, 2012 at 11:12 AM, Joel R. <joelru...@gmail.com>wrote:
>>>>>>>>
>>>>>>>>> Quaternion.h
>>>>>>>>> http://pastebin.com/hxTBab3T
>>>>>>>>>
>>>>>>>>> Quaternion.cpp
>>>>>>>>> http://pastebin.com/2WizAewD
>>>>>>>>>
>>>>>>>>> Quaternion Rotation Formulas (Yaw/Pitch/Roll)
>>>>>>>>> http://pastebin.com/BHRvcbCG
>>>>>>>>>
>>>>>>>>> I got most of the quaternion stuff from Ogre engine and converted
>>>>>>>>> to work on Source Engine.  The functions you will be interested in 
>>>>>>>>> using
>>>>>>>>> are FromRotationMatrix, ToRotationMatrix, AxisAngle, ToAxisAngle,
>>>>>>>>> GetRotationTo, ToAxes, Slerp, GetAngles, GetMatrix
>>>>>>>>>
>>>>>>>>> So basically you'll do what's below: (this is psuedocode, function
>>>>>>>>> names are not exact!)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Quat current, target;
>>>>>>>>> current.FromRotationMatrix( ent->EntityWorldTransform() );
>>>>>>>>>
>>>>>>>>> target = current;
>>>>>>>>> target = yaw( target, 10 ); //10 degrees to the right, this
>>>>>>>>> function is not part of Quat class for some reason
>>>>>>>>>
>>>>>>>>> current = Slerp( current, target, 0.2 ); //This is only 20%,
>>>>>>>>> you'll need to calculate the angle difference between current/target, 
>>>>>>>>> and
>>>>>>>>> then move based on your angles per second speed.
>>>>>>>>>
>>>>>>>>> matrix3x4_t newRot;
>>>>>>>>> current.ToRotationMatrix( newRot );
>>>>>>>>> ent->SetWorldTransform( newRot );
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Enjoy!
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Mar 1, 2012 at 12:46 PM, Joel R. <joelru...@gmail.com>wrote:
>>>>>>>>>
>>>>>>>>>> The quaternion calculations you're doing are similar to just
>>>>>>>>>> manipulating the Euler Angles, which cause Gimbal Lock.
>>>>>>>>>>
>>>>>>>>>> The way I did it in my flight simulation is to create a Current
>>>>>>>>>> Quaternion (from the starting Matrix Transformation when user 
>>>>>>>>>> spawns) and
>>>>>>>>>> Target Quaternion (where they want to rotate to).  I also used some
>>>>>>>>>> formulas to rotate the quaternion in the individual yaw/pitch/roll
>>>>>>>>>> orientations, I recommend googling for these formulas.  I then used 
>>>>>>>>>> the
>>>>>>>>>> Slerp formula to animate from the Current quaternion to the Target
>>>>>>>>>> quaternion. Slerp will avoid Gimbal-Lock entirely, which is very 
>>>>>>>>>> neat.
>>>>>>>>>>
>>>>>>>>>> After you do those calculations, just convert the new Current
>>>>>>>>>> Quaternion into a Matrix Transformation and set the Entity to take 
>>>>>>>>>> that
>>>>>>>>>> transform.
>>>>>>>>>>
>>>>>>>>>> I've used this to control the entity rotation as well as the
>>>>>>>>>> camera, it allows you to do some pretty nifty tricks.
>>>>>>>>>>
>>>>>>>>>> I'll look for the code, if I still have it, and I'll post it here
>>>>>>>>>> for you.  Or if you figure out, please post a video =D
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>>
>>>>>>>>>> Joel
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thu, Mar 1, 2012 at 11:55 AM, Minh <minh...@telus.net> wrote:
>>>>>>>>>>
>>>>>>>>>>>  You can try spitting out the results to a file so you can
>>>>>>>>>>> observe the hitch more closely.
>>>>>>>>>>> Look for a function called COM_Log
>>>>>>>>>>>
>>>>>>>>>>> COM_Log ( "viewangle_hitch.txt", "%.2f  %.2f  %.2f  \n",
>>>>>>>>>>> viewangles.x, viewangles.y, viewangles.z );
>>>>>>>>>>>
>>>>>>>>>>> On 3/1/2012 3:55 AM, Craig Louie wrote:
>>>>>>>>>>>
>>>>>>>>>>> Thanks for the reply Saul. I hadn't thought of disabling
>>>>>>>>>>> prediction. I just gave it a shot. I changed to "engine->ClientCmd(
>>>>>>>>>>> "cl_predict 0" );" in cdll_client_int.cpp. With another test, the 
>>>>>>>>>>> unsmooth
>>>>>>>>>>> rotation when looking straight up/down still occurs.
>>>>>>>>>>>
>>>>>>>>>>> My main theories at this point:
>>>>>>>>>>> 1) Something is occurring in VectorAngles(vec_for_out,
>>>>>>>>>>> vec_up_out, viewangles) to cause this. VectorAngles() might not 
>>>>>>>>>>> produce
>>>>>>>>>>> straight up/down Euler angles properly - choking because of aliasing
>>>>>>>>>>> perhaps? This is a big guess because I don't know the inner 
>>>>>>>>>>> workings of
>>>>>>>>>>> VectorAngles().
>>>>>>>>>>> 2) There is some code somewhere else that is conflicting with
>>>>>>>>>>> the full, unclamped rotation I've implemented. I've tried to remove 
>>>>>>>>>>> all
>>>>>>>>>>> instances of pitch clamping, for example. But I may have missed 
>>>>>>>>>>> something.
>>>>>>>>>>> Also, it's possible mouse rotation is somehow conflicting with my 
>>>>>>>>>>> changes
>>>>>>>>>>> to joystick rotation.
>>>>>>>>>>>
>>>>>>>>>>> Here's a video of the issue I'm seeing. It happens a few times
>>>>>>>>>>> in the video. You'll see it happen the first time at about 11 
>>>>>>>>>>> seconds in
>>>>>>>>>>> when the text on the floor twists/shakes.
>>>>>>>>>>> http://www.youtube.com/watch?v=PLN641Qsn08
>>>>>>>>>>>
>>>>>>>>>>> Thanks!
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Feb 29, 2012 at 11:34 PM, Saul Rennison <
>>>>>>>>>>> saul.renni...@gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> The hitching is most likely something trying to revert your
>>>>>>>>>>>> angle changes (I.e. in prediction). Have you tried disabling 
>>>>>>>>>>>> prediction?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Thursday, March 1, 2012, Craig Louie wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hello Coders,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I'm trying to create a space flight combat game with the
>>>>>>>>>>>>> Source SDK. Currently, I am trying to achieve rotation around the 
>>>>>>>>>>>>> player's
>>>>>>>>>>>>> local axes for airplane-like pitch, yaw and roll. Below is the 
>>>>>>>>>>>>> code I'm
>>>>>>>>>>>>> using to try to implement full 3D rotation. I'm running into a 
>>>>>>>>>>>>> problem
>>>>>>>>>>>>> where the player's view twists and hitches unsmoothly when the 
>>>>>>>>>>>>> player looks
>>>>>>>>>>>>> straight up or straight down. I think this may be because of the 
>>>>>>>>>>>>> inherent
>>>>>>>>>>>>> problem of aliasing/Gimbal-lock when using Euler angles. Any 
>>>>>>>>>>>>> advise?
>>>>>>>>>>>>>
>>>>>>>>>>>>> //#########################################
>>>>>>>>>>>>> //Take the Euler angles for the player's orientation
>>>>>>>>>>>>> (viewangles) and convert them to vectors.
>>>>>>>>>>>>> Vector vec_for, vec_rt, vec_up, vec_for_out, vec_rt_out,
>>>>>>>>>>>>> vec_up_out;
>>>>>>>>>>>>> AngleVectors(viewangles, &vec_for, &vec_rt, &vec_up);
>>>>>>>>>>>>>
>>>>>>>>>>>>> //Take the resulting vectors and the desired rotation amounts
>>>>>>>>>>>>> and convert them to Quaternions.
>>>>>>>>>>>>> Quaternion turn_q, look_q, roll_q;
>>>>>>>>>>>>> // NOTE: Assumes axis is a unit vector, non-unit vectors will
>>>>>>>>>>>>> bias the resulting rotation angle (but not the axis)
>>>>>>>>>>>>> VectorNormalize(vec_up);
>>>>>>>>>>>>> AxisAngleQuaternion(vec_up, turn_angle, turn_q);
>>>>>>>>>>>>>
>>>>>>>>>>>>> VectorNormalize(vec_rt);
>>>>>>>>>>>>> AxisAngleQuaternion(vec_rt, look_angle, look_q);
>>>>>>>>>>>>>
>>>>>>>>>>>>> VectorNormalize(vec_for);
>>>>>>>>>>>>> AxisAngleQuaternion(vec_for, roll_angle, roll_q);
>>>>>>>>>>>>>
>>>>>>>>>>>>> //Convert the quaternions to matrices.
>>>>>>>>>>>>> matrix3x4_t xform0, xform1, xform2;
>>>>>>>>>>>>> QuaternionMatrix(turn_q, xform0);
>>>>>>>>>>>>> QuaternionMatrix(look_q, xform1);
>>>>>>>>>>>>> QuaternionMatrix(roll_q, xform2);
>>>>>>>>>>>>>
>>>>>>>>>>>>> //Combine matrices.
>>>>>>>>>>>>> matrix3x4_t xformA, xformB;
>>>>>>>>>>>>> MatrixMultiply(xform0, xform1, xformA);
>>>>>>>>>>>>> MatrixMultiply(xformA, xform2, xformB);
>>>>>>>>>>>>>
>>>>>>>>>>>>> //Rotate the vectors with our combined rotation matrix.
>>>>>>>>>>>>> VectorRotate(vec_for, xformB, vec_for_out);
>>>>>>>>>>>>> VectorRotate(vec_rt, xformB, vec_rt_out);
>>>>>>>>>>>>> VectorRotate(vec_up, xformB, vec_up_out);
>>>>>>>>>>>>>
>>>>>>>>>>>>> //Determine the new viewangles based on our rotated vectors.
>>>>>>>>>>>>> VectorAngles(vec_for_out, vec_up_out, viewangles);
>>>>>>>>>>>>> //#########################################
>>>>>>>>>>>>>
>>>>>>>>>>>>> I put this code into in_joystick.cpp in the JoyStickMove(
>>>>>>>>>>>>> float frametime, CUserCmd *cmd ) function.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks!
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>  --
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>  Kind regards,
>>>>>>>>>>>> *Saul Rennison*
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> To unsubscribe, edit your list preferences, or view the list
>>>>>>>>>>>> archives, please visit:
>>>>>>>>>>>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> To unsubscribe, edit your list preferences, or view the list 
>>>>>>>>>>> archives, please 
>>>>>>>>>>> visit:https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> To unsubscribe, edit your list preferences, or view the list
>>>>>>>>>>> archives, please visit:
>>>>>>>>>>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> To unsubscribe, edit your list preferences, or view the list
>>>>>>>>> archives, please visit:
>>>>>>>>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> To unsubscribe, edit your list preferences, or view the list
>>>>>>>> archives, please visit:
>>>>>>>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> -Tony
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> To unsubscribe, edit your list preferences, or view the list
>>>>>>> archives, please visit:
>>>>>>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> To unsubscribe, edit your list preferences, or view the list
>>>>>> archives, please visit:
>>>>>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> To unsubscribe, edit your list preferences, or view the list archives,
>>>> please visit:
>>>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> To unsubscribe, edit your list preferences, or view the list archives,
>>> please visit:
>>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>>
>>>
>>>
>>
>> _______________________________________________
>> To unsubscribe, edit your list preferences, or view the list archives,
>> please visit:
>> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>>
>>
>>
>
> _______________________________________________
> To unsubscribe, edit your list preferences, or view the list archives,
> please visit:
> https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders
>
>
>


-- 
-Tony
_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
https://list.valvesoftware.com/cgi-bin/mailman/listinfo/hlcoders

Reply via email to