Advertisement
csunday95

Sploosh Kaboom RE

Feb 3rd, 2020
1,032
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.69 KB | None | 0 0
  1.  
  2. undefined4 setup_sk_board(int pSKStruct,undefined param_2,int shipCount)
  3.  
  4. {
  5.   int xIdx;
  6.   undefined *pSKSpace;
  7.   int yIDx;
  8.   int spacesLeft;
  9.  
  10.   yIDx = 0;
  11.                     /* loop to zero out SK board */
  12.   xIdx = 0;
  13.   do {
  14.     pSKSpace = (undefined *)(pSKStruct + xIdx);
  15.     spacesLeft = 8;
  16.     do {
  17.       *pSKSpace = 0;
  18.       pSKSpace = pSKSpace + 1;
  19.       spacesLeft = spacesLeft + -1;
  20.     } while (spacesLeft != 0);
  21.     yIDx = yIDx + 1;
  22.     xIdx = xIdx + 8;
  23.   } while (yIDx < 8);
  24.   *(undefined *)(pSKStruct + 0x7d) = param_2;
  25.   *(undefined *)(pSKStruct + 0x7e) = 0;
  26.   if (shipCount == 2) {
  27.     *(undefined *)(pSKStruct + 0x7c) = 2;
  28.     place_sk_ship(pSKStruct,0,2);
  29.     place_sk_ship(pSKStruct,1,3);
  30.   }
  31.   else {
  32.     if (shipCount < 2) {
  33.       if (0 < shipCount) {
  34.         *(undefined *)(pSKStruct + 0x7c) = 1;
  35.         place_sk_ship(pSKStruct,0,2);
  36.       }
  37.     }
  38.     else {
  39.       if (shipCount < 4) {
  40.         *(undefined *)(pSKStruct + 0x7c) = 3;
  41.         place_sk_ship(pSKStruct,0,2);
  42.         place_sk_ship(pSKStruct,1,3);
  43.         place_sk_ship(pSKStruct,2,4);
  44.       }
  45.     }
  46.   }
  47.   *(undefined4 *)(pSKStruct + 0x80) = 0;
  48.   return 1;
  49. }
  50.  
  51.  
  52. void place_sk_ship(undefined4 param_1,undefined4 param_2,uint ship_len)
  53.  
  54. {
  55.   uint isEmpty;
  56.   char *pBoardSpace;
  57.   int iVar2;
  58.   int pSKBoard;
  59.   uint uVar3;
  60.   int coordIdx;
  61.   int pCoordArr;
  62.   int iVar1;
  63.   int pShipArr;
  64.   int iVar4;
  65.   char yInc;
  66.   int iVar5;
  67.   undefined totalLen;
  68.   char yPos;
  69.   undefined xPos;
  70.   uint shipLen?;
  71.   double dVar2;
  72.   double dVar6;
  73.   double dVar3;
  74.   undefined8 uVar4;
  75.   uint orientation;
  76.   uint xCoord;
  77.   uint yCoord;
  78.  
  79.   uVar4 = allocBlock?();
  80.   pSKBoard = (int)((ulonglong)uVar4 >> 0x20);
  81.   uVar3 = (uint)uVar4;
  82.   shipLen? = ship_len & 0xff;
  83.   do {
  84.     dVar2 = (double)RNG_func?((double)FLOAT_803f9458);
  85.     iVar5 = (int)(short)(int)dVar2 >> 0x1f;
  86.     orientation = ((int)(short)(int)dVar2 & 1U ^ -iVar5) + iVar5 & 0xff;
  87.     dVar6 = (double)RNG_func?((double)FLOAT_803f945c);
  88.     xCoord = (int)dVar6 & 0xff;
  89.     dVar3 = (double)RNG_func?((double)FLOAT_803f945c);
  90.     yCoord = (int)dVar3 & 0xff;
  91.     isEmpty = check_sk_space_empty(pSKBoard,xCoord,yCoord,shipLen?,orientation);
  92.   } while ((isEmpty & 0xff) == 0);
  93.   xPos = (undefined)xCoord;
  94.   totalLen = (undefined)ship_len;
  95.   yPos = (char)yCoord;
  96.   if (orientation == 0) {
  97.     yInc = '\0';
  98.     coordIdx = 0;
  99.     pShipArr = (uVar3 & 0xff) * 0xf;
  100.     pBoardSpace = (char *)(pSKBoard + ((int)dVar6 & 0xffU) * 8 + yCoord);
  101.     while (shipLen? != 0) {
  102.       pCoordArr = pSKBoard + pShipArr + coordIdx;
  103.       *(undefined *)(pCoordArr + 0x40) = xPos;
  104.       *(char *)(pCoordArr + 0x41) = yPos + yInc;
  105.       *pBoardSpace = (char)(uVar3 & 0xff) + 'f';
  106.       yInc = yInc + '\x01';
  107.       pBoardSpace = pBoardSpace + 1;
  108.       coordIdx = coordIdx + 2;
  109.       shipLen? = shipLen? - 1;
  110.     }
  111.     pShipArr = pSKBoard + pShipArr;
  112.     *(undefined *)(pShipArr + 0x4b) = xPos;
  113.     *(char *)(pShipArr + 0x4c) = yPos;
  114.     *(undefined *)(pShipArr + 0x4d) = 0;
  115.     *(undefined *)(pShipArr + 0x4e) = totalLen;
  116.   }
  117.   else {
  118.     iVar5 = 0;
  119.     iVar2 = 0;
  120.     iVar4 = (uVar3 & 0xff) * 0xf;
  121.     while (shipLen? != 0) {
  122.       iVar1 = pSKBoard + iVar4 + iVar2;
  123.       *(undefined *)(iVar1 + 0x40) = (char)(xCoord + iVar5);
  124.       *(char *)(iVar1 + 0x41) = yPos;
  125.       *(char *)(pSKBoard + yCoord + (xCoord + iVar5) * 8) = (char)(uVar3 & 0xff) + 'f';
  126.       iVar5 = iVar5 + 1;
  127.       iVar2 = iVar2 + 2;
  128.       shipLen? = shipLen? - 1;
  129.     }
  130.     iVar4 = pSKBoard + iVar4;
  131.     *(undefined *)(iVar4 + 0x4b) = xPos;
  132.     *(char *)(iVar4 + 0x4c) = yPos;
  133.     *(undefined *)(iVar4 + 0x4d) = totalLen;
  134.     *(undefined *)(iVar4 + 0x4e) = 0;
  135.   }
  136.   pSKBoard = pSKBoard + (uVar3 & 0xff) * 0xf;
  137.   *(undefined *)(pSKBoard + 0x48) = totalLen;
  138.   *(undefined *)(pSKBoard + 0x49) = totalLen;
  139.   FUN_80328f7c(1);
  140.   return;
  141. }
  142.  
  143.  
  144. undefined4 check_sk_space_empty(int pSKBoard,int xCoord,int yCoord,int ship_len,int orientation)
  145.  
  146. {
  147.   byte *pBoardSpace;
  148.   int iVar1;
  149.  
  150.   if (orientation == 0) {
  151.     pBoardSpace = (byte *)(pSKBoard + xCoord * 8 + yCoord);
  152.     if (0 < ship_len) {
  153.       do {
  154.         if (((7 < xCoord) || (7 < yCoord)) || (100 < *pBoardSpace)) {
  155.           return 0;
  156.         }
  157.         yCoord = yCoord + 1;
  158.         pBoardSpace = pBoardSpace + 1;
  159.         ship_len = ship_len + -1;
  160.       } while (ship_len != 0);
  161.     }
  162.   }
  163.   else {
  164.     iVar1 = xCoord << 3;
  165.     if (0 < ship_len) {
  166.       do {
  167.         if (((7 < xCoord) || (7 < yCoord)) || (100 < *(byte *)(pSKBoard + yCoord + iVar1))) {
  168.           return 0;
  169.         }
  170.         xCoord = xCoord + 1;
  171.         iVar1 = iVar1 + 8;
  172.         ship_len = ship_len + -1;
  173.       } while (ship_len != 0);
  174.     }
  175.   }
  176.   return 1;
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement