On Saturday, October 31, 2020 at 7:01:48 PM UTC-5, MK wrote:
> Last week I decided to play 100 matches of 17 points against XG
> using my own external dll. On my 11th match, I had to reboot my
> PC when I was only a dozen moves into the first game.
>
> When I restarted XG, after a few moves, I just rolled the dice
> in a hurry instead of doubling and I thought I noticed that the
> dice sequence wasn't the same.
>
> I stopped, restarted to double check and sure enough the rolls
> were different depending on if I doubled. So, I tried 7 times
> exporting and comparing the moves, as below, to see what was
> going on. After I doubled, for the following two turns the rolls
> were different but synchronized again afterwards.
>
> Altering my checker moves or XG's doubling didn't do anything.
> Only my doubling caused it. The source code, (with some simple
> beeps inserted to hear when the DLL was called), to my dice
> roller is at the bottom, along with instructions to compile it
> and a link to my EXE.
>
> The DLL beeped for the different rolls also, which means that
> XG fetched the rolls from it, cached and skipped a few to roll
> its own numbers before fetching from the DLL again.
>
> This is eerie. Perhaps something to do with being haloween.. ;)
> Check the below sequences, do your own tests, etc. and let me
> know what you find out if anything different or the same.
>
> MK
>
> ============================================================
> After the first sequence, I only pasted event time and the rolls
> to save space.
>
> ; [Player 1 "XG Roller++"]
> ; [Player 2 "Murat 17"]
> ; [EventDate "2020.10.31"]
> ; [EventTime "15.45"]
> 17 point match
> Game 1
> Murat 17 : 0 XG Roller++ : 0
> 1) 65: 24/13 66: 24/18(2) 13/7(2)
> 2) 22: 13/11(2) 6/4(2) 32: 13/8
> 3) 21: 13/11 6/5 64: 8/2 6/2
> 4) 43: 24/20 8/5 54: 8/4 6/1
> 5) 21: 11/8 33: 18/15(2) 13/10(2)
> 6) 62: 20/14 8/6 Doubles => 2
> 7) Takes 61: 10/4 6/5
>
> ; [EventTime "15.47"]
> 1) 65: 13/7 8/3 66: 24/18*(2) 13/7(2)
> 2) Doubles => 2 Takes
> 3) 41: Bar/20 Doubles => 4
> 4) Takes 63: 13/7 8/5*
>
> ; [EventTime "15.48"]
> 1) 65: 24/13 66: 24/18(2) 13/7(2)
> 2) 22: 13/11(2) 6/4(2) 32: 13/8
> 3) 21: 13/11 6/5 64: 8/2 6/2
> 4) 43: 11/4 54: 13/9 13/8
> 5) 21: 24/22 4/3 33: 8/5(2) 6/3*(2)
> 6) Doubles => 2 Takes
> 7) 41: Bar/21 4/3 53: 9/4* 7/4
> 8) 53: Cannot Move 43: 18/15 8/4
> 9) 64: Cannot Move 62: 18/10
> 10) 21: ????
>
> ; [EventTime "15.51"]
> 1) 65: 13/7 8/3 66: 24/18*(2) 13/7(2)
> 2) 22: Bar/23 24/22 13/11 6/4 Doubles => 2
> 3) Takes 32: 6/3* 3/1*
> 4) 21: Bar/23 Bar/24* 64: Bar/21* 13/7
> 5) 43: Bar/21 24/21 54: 18/13 18/14*
> 6) Doubles => 4 Takes
> 7) 62: Bar/23 13/7 11: 21/20 7/5 6/5
> 8) 43: ????
>
> ; [EventTime "16.01"]
> 1) 65: 13/7 8/3 66: 24/18*(2) 13/7(2)
> 2) 22: Bar/23 24/22 13/11 6/4 Doubles => 2
> 3) Takes 32: 6/3* 3/1*
> 4) 21: Bar/23 Bar/24* 64: Bar/21* 13/7
> 5) 43: Bar/21 6/3 54: 18/13 18/14*
> 6) Doubles => 4 Takes
> 7) 62: Bar/23 21/15 11: 14/13 7/5 6/5
> 8) 43: ????
>
> ; [EventTime "17.00"]
> 1) 65: 24/13 66: 24/18(2) 13/7(2)
> 2) 22: 24/20 6/4(2) 32: 8/5* 7/5
> 3) 21: Bar/22 Doubles => 2
> 4) Takes 64: 13/7 6/2
> 5) 43: 13/6 54: 8/3* 6/2
> 6) 21: Bar/22* 33: Bar/22 7/4(2) 6/3*
> 7) 62: Cannot Move 61: 22/16 4/3
> 8) 31: Bar/21* 41: Bar/24 8/4*
> 9) 65: Cannot Move 33: 16/4
> 10) 53: Cannot Move 44: 18/10(2)
>
> ; [EventTime "17.04"]
> 1) 65: 24/13 66: 24/18(2) 13/7(2)
> 2) 22: 24/20 6/4(2) 32: 8/5* 7/5
> 3) 21: Bar/22 Doubles => 2
> 4) Takes 64: 13/7 6/2
> 5) 43: 13/6 54: 8/3* 6/2
> 6) Doubles => 4 Takes
> 7) 31: Bar/22* 22/21 41: Bar/24 8/4*
> 8) 65: Cannot Move Doubles => 8
> 9) Takes 33: 18/15(2) 7/4(2)
> 10) 53: Bar/17 44: 24/16 15/11(2)
> 11) 66: 17/5 13/7(2) 22: 16/14 11/5
>
> ============================================================
>
> Here is the c code:
>
> #include <windows.h>
> #include <stdlib.h>
> #define WINAPI __stdcall
>
> int seed=0;
> int die1, die2, dise;
> int WINAPI DllMain( int hModule, int ul_reason_for_call, void *lpReserved )
> {
> switch( ul_reason_for_call )
> {
> case DLL_PROCESS_ATTACH:
> beep (500,1500);
> }
> return 1;
> }
>
> __declspec( dllexport ) int Dice(void)
> {
> if (seed == 0)
> {
> seed = 11117;
> srand(seed);
> beep (500,500);
> }
> die1 = rand();
> die2 = rand();
> dise = ((die1 % 6) + 1) * 8 + ((die2 % 6) + 1);
> beep (700,400);
> return dise;
> }
>
> ============================================================
>
> Unless you already have a C compiler, here is a link to "TinyC
> Compiler" which is portable and only requires 1.5Mb of disk space.
>
>
https://en.wikipedia.org/wiki/Tiny_C_Compiler
>
> Save my above code to a text file xyz.c and create another text
> file xyx.def with these lines:
>
> LIBRARY xyz.dll
> EXPORTS
> Dice
>
> And compile it using the command:
>
> .\tcc xyz.c -shared
>
> Then point to it from XG's external dice settings.
>
> ============================================================
>
> With a little trust and virus scanning, you can download my
> executable directly from this link:
>
>
https://www.montanaonline.net/backgammon/mkdice.bin
>
> (Server doesn't allow .dll just rename it after you download).
>
> ============================================================
>
> MK
If you manually roll dice and manually enter into (edit) every roll of the game...will this show if xgammon....an or snowy and or gnu and or jelly fish cheats....if outcome is same as when set on auto...Would this not show if computer program cheats or not??? G A