Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 02/19/2024 in all areas

  1. I actually was playing this thing 280hz and the UI animations were really bad, really distracting, but I started to be able to ignore it. On my latest revisit, I was unable to figure out why suddenly Devastators weren't moving the way I had balanced it. Eventually I was looking at the DGVoodoo program I had installed on it. I'm not sure how the file was generated (because I couldn't find it in backup duplicated installation files) but editing dgvoodoo.cnf, there was a section for framerate. In there you can cap it to 60. The game might have been a 30fps game, I don't' really remember because when I owned the game as a kid, we didn't exactly have a good computer that could push performance like what you can do today. I do know those UI animations look a lot less ridiculous at 60fps. I still cap mine at 144, because I just wanted it smoother gameplay animations. The way the game dealt with speed, is what inspired me to mess with these rules. I noticed that at higher speeds the framerate was smoother. So my solution (the OP for this thread's solution) was to slow units down. Yes, the scripting happens faster. But I would also argue that the original balancing on this game was very.... first draft. Which is why I opted increase health pools on all buildings and units. So now battles aren't just everything blowing up instantly. And it helps a little bit with microing your units through some of the maze like terrain. I didn't touch costs or build times though, as that was something I attempted a few years ago, and it resulted in off world missions being basically impossible because I couldn't keep up with the AI. This current rebalance I have affects health pools, unit speeds, unit damage values, ranges. I've tested playing through each campaign on easy with it. Off world missions were doable. But, in order to get through Harkonnen's Geidi Prime mission, I had to resort to turning gamespeed down so I could do a more calculated rush, and I did have to rush. Turtling wasn't feasible. So it's just barely playable, and maybe a more skilled RTS player could work within those confines better. I agree about the gamespeed framerate decoupling, but more than anything, I just wish it was widescreen. I don't get why this is the least liked of the old Dune RTS, it has such amazing potential. It has the tab system introduced in RA2, which to me gives it a huge edge over Dune 2000 for me. Plus no need to put down concrete for everything. But the maps are kind of not that great, and balancing were sloppy. But that soundtrack, oh man that soundtrack. Anyway, sorry for wall of text. Thanks for the conversation on the game. I just feel like no one cares about this game anymore.
    1 point
  2. it's not the same, but the closest we've got is OpenRA. there have also been new sprites made for OpenRA's recreation of d2k, and surely artists have more freedom with that platform. OG d2k is more limited in this regard N.N,> is around the Landsraad server on Discord, pinned on this forum, so feel free to drop by and poke him he'd be able to give you much more info about OpenRA stuff
    1 point
  3. Mirrored it on my site now http://nyerguds.arsaneus-design.com/dune/dune2x/
    1 point
  4. Finally I managed Sandworm behaviour! Did you remember the spawning Fremen Warriors from Atreides/Fremen Palace as Special Weapon? Spawned units are set on Hunt command by default (expected by code) so a spawned Sandworm on Hunt command together Warriors, it starts to swallow them before they start to go against enemies! So I "say" to code that Warrior/Warriors typeIndex (04 & 02) aren't valid targets (0 is returned): seg031:14F0 loc_29850: ; Integer Subtraction seg031:14F0 83 EC 04 sub sp, 4 seg031:14F3 56 push si seg031:14F4 57 push di seg031:14F5 33 F6 xor si, si ; Logical Exclusive OR seg031:14F7 8B 46 06 mov ax, word ptr [bp+pUnitGamePtr] seg031:14FA 0B 46 08 or ax, word ptr [bp+pUnitGamePtr+2] ; Logical Inclusive OR seg031:14FD 74 08 jz short ret0 ; Jump if Zero (ZF=1) seg031:14FF 8B 46 0A mov ax, word ptr [bp+unitGamePtr] seg031:1502 0B 46 0C or ax, word ptr [bp+unitGamePtr+2] ; Logical Inclusive OR seg031:1505 75 05 jnz short unitCheck ; Jump if Not Zero (ZF=0) seg031:1507 seg031:1507 ret0: ; CODE XREF: calcTime?Distance?+10 j seg031:1507 33 C0 xor ax, ax ; Logical Exclusive OR seg031:1509 seg031:1509 loc_29869: ; CODE XREF: calcTime?Distance?+FD j seg031:1509 E9 E1 00 jmp Done ; Jump seg031:150C ; --------------------------------------------------------------------------- seg031:150C seg031:150C unitCheck: ; CODE XREF: calcTime?Distance?+18 j seg031:150C C4 5E 0A les bx, [bp+unitGamePtr] ; Load Full Pointer to ES:xx seg031:150F 26 FF 77 0C push es:[bx+_unitGame.mapTileY] ; posY seg031:1513 26 FF 77 0A push es:[bx+_unitGame.mapTileX] ; posX seg031:1517 seg031:1517 loc_29877: ; Call Procedure seg031:1517 9A 86 00 48 0D call mapIndexFromMapTileXY seg031:151C 59 pop cx seg031:151D 59 pop cx seg031:151E 50 push ax ; mapPos seg031:151F 9A 4D 00 D0 42 call j_mapTileCheckIfFogWar ; Call Procedure seg031:1524 59 pop cx seg031:1525 0B C0 or ax, ax ; Logical Inclusive OR seg031:1527 75 03 jnz short loc_2988C ; Jump if Not Zero (ZF=0) seg031:1529 E9 BC 00 jmp retSI ; Jump seg031:152C ; --------------------------------------------------------------------------- seg031:152C seg031:152C loc_2988C: ; CODE XREF: calcTime?Distance?+3A j seg031:152C C4 5E 0A les bx, [bp+unitGamePtr] ; Load Full Pointer to ES:xx seg031:152F 26 8A 47 02 mov al, es:[bx+_unitGame.typeIndex] seg031:1533 98 cbw ; AL -> AX (with sign) seg031:1537 8B F8 mov di, ax seg031:1537 90 nop ; No Operation seg031:1534 BA 5A 00 mov dx, size _unitData seg031:1537 F7 EA imul dx ; Signed Multiply seg031:1539 05 00 00 add ax, 0 ; Add seg031:153C C7 46 FE 10 2B mov word ptr [bp+unitDataPtr+2], seg seg130 seg031:1541 89 46 FC mov word ptr [bp+unitDataPtr], ax seg031:1544 33 F6 xor si, si ; Logical Exclusive OR seg031:1546 C4 5E 0A les bx, [bp+unitGamePtr] ; Load Full Pointer to ES:xx seg031:1549 26 FF 77 0C push es:[bx+_unitGame.mapTileY] ; posY seg031:154D 26 FF 77 0A push es:[bx+_unitGame.mapTileX] ; posX seg031:1551 9A 86 00 48 1D call mapIndexFromMapTileXY ; Call Procedure seg031:1556 59 pop cx seg031:1557 59 pop cx seg031:1558 50 push ax ; mapPosition seg031:1559 9A 61 00 D0 42 call j_mapTileTypeGet ; Call Procedure seg031:155E 59 pop cx seg031:155F seg031:155F loc_298BF: seg031:155F BA 1C 00 mov dx, 1Ch seg031:1562 seg031:1562 loc_298C2: ; Signed Multiply seg031:1562 F7 EA imul dx seg031:1564 8B D8 mov bx, ax seg031:1566 83 BF 40 3A 00 cmp word_46E60[bx], 0 ; Compare Two Operands seg031:156B 74 7B jz short retSI ; Jump if Zero (ZF=1) seg031:156D C4 5E FC les bx, [bp+unitDataPtr] ; Load Full Pointer to ES:xx seg031:1570 seg031:1570 loc_298D0: seg031:1570 26 8B 5F 3C mov bx, es:[bx+_unitData.MovementType] seg031:1574 83 FB 03 cmp bx, 3 ; switch 4 cases seg031:1577 77 14 ja short loc_298EF ; default seg031:1579 D1 E3 shl bx, 1 ; Shift Logical Left seg031:157B seg031:157B loc_298DB: ; switch jump seg031:157B 2E FF A7 F3 15 jmp cs:off_29953[bx] seg031:1580 seg031:1580 Tracked: ; DATA XREF: seg031:off_29953 o seg031:1580 BE E8 03 mov si, 3E8h ; case 0x1 seg031:1583 EB 08 jmp short loc_298EF ; Jump seg031:1585 ; --------------------------------------------------------------------------- seg031:1585 seg031:1585 Foot: ; CODE XREF: calcTime?Distance?:loc_298DB j seg031:1585 ; DATA XREF: seg031:off_29953 o seg031:1585 BE 64 00 mov si, 64h ; 'd' ; case 0x0 seg031:1588 EB 03 jmp short loc_298EF ; Jump seg031:158A ; --------------------------------------------------------------------------- seg031:158A seg031:158A Wheeled: ; CODE XREF: calcTime?Distance?:loc_298DB j seg031:158A ; DATA XREF: seg031:off_29953 o seg031:158A BE 88 13 mov si, 1388h ; case 0x3 seg031:158D EB 04 jmp short loc_298F3 ; Jump seg031:158F ; --------------------------------------------------------------------------- seg031:158F seg031:158F loc_298EF: ; CODE XREF: calcTime?Distance?+8A j seg031:1593 83 FF 02 cmp di, 2 ; Compare Two Operands seg031:156B 74 05 jz short caseFremen ; Jump if Zero (ZF=1) seg031:1593 83 FF 04 cmp di, 4 ; Compare Two Operands seg031:156B 75 02 jnz short loc_298F3 ; Jump if Not Zero (ZF=0) seg031:1593 caseFremen: seg031:158F 33 F6 xor si, si ; default seg031:1591 EB 00 jmp short $+2 ; Jump seg031:1593 seg031:1593 loc_298F3: ; CODE XREF: calcTime?Distance?+96 j seg031:1593 ; calcTime?Distance?+9B j ... seg031:1593 C4 5E 0A les bx, [bp+unitGamePtr] ; Load Full Pointer to ES:xx seg031:1596 26 80 7F 6A 00 cmp es:[bx+_unitGame.speed3], 0 ; Compare Two Operands seg031:159B 75 07 jnz short loc_29907 ; Jump if Not Zero (ZF=0) seg031:159D C4 5E 0A les bx, [bp+unitGamePtr] ; Load Full Pointer to ES:xx seg031:15A0 26 80 7F 51 00 cmp es:[bx+_unitGame.weaponCooldownTimer], 0 ; Compare Two Operands seg031:15A5 74 04 jz short loc_2990B ; Jump if Zero (ZF=1) seg031:15A7 seg031:15A7 loc_29907: ; CODE XREF: calcTime?Distance?+AE j seg031:15A7 B1 02 mov cl, 2 seg031:15A9 D3 E6 shl si, cl ; Shift Logical Left seg031:15AB seg031:15AB loc_2990B: ; CODE XREF: calcTime?Distance?+B8 j seg031:15AB C4 5E 0A les bx, [bp+unitGamePtr] ; Load Full Pointer to ES:xx seg031:15AE seg031:15AE loc_2990E: ; buildingPosY seg031:15AE 26 FF 77 0C push es:[bx+_unitGame.mapTileY] seg031:15B2 seg031:15B2 loc_29912: ; buildingPosX seg031:15B2 26 FF 77 0A push es:[bx+_unitGame.mapTileX] seg031:15B6 C4 5E 06 les bx, [bp+pUnitGamePtr] ; Load Full Pointer to ES:xx seg031:15B9 26 FF 77 0C push es:[bx+_unitGame.mapTileY] ; unitPosY seg031:15BD seg031:15BD loc_2991D: ; unitPosX seg031:15BD 26 FF 77 0A push es:[bx+_unitGame.mapTileX] seg031:15C1 seg031:15C1 loc_29921: ; Call Procedure seg031:15C1 9A 04 01 48 1D call getDistance? seg031:15C6 83 C4 08 add sp, 8 ; Add seg031:15C9 8B F8 mov di, ax seg031:15CB 0B FF or di, di ; Logical Inclusive OR seg031:15CD 74 0B jz short loc_2993A ; Jump if Zero (ZF=1) seg031:15CF 0B F6 or si, si ; Logical Inclusive OR seg031:15D1 seg031:15D1 loc_29931: ; Jump if Zero (ZF=1) seg031:15D1 74 07 jz short loc_2993A seg031:15D3 8B C6 mov ax, si seg031:15D5 99 cwd ; AX -> DX:AX (with sign) seg031:15D6 seg031:15D6 loc_29936: ; Signed Divide seg031:15D6 F7 FF idiv di seg031:15D8 8B F0 mov si, ax seg031:15DA seg031:15DA loc_2993A: ; CODE XREF: calcTime?Distance?+E0 j seg031:15DA ; calcTime?Distance?:loc_29931 j seg031:15DA 83 FF 02 cmp di, 2 ; Compare Two Operands seg031:15DD 7D 09 jge short retSI ; Jump if Greater or Equal (SF=OF) seg031:15DF BA 02 00 mov dx, 2 seg031:15E2 8B C6 mov ax, si seg031:15E4 F7 EA imul dx ; Signed Multiply seg031:15E6 8B F0 mov si, ax seg031:15E8 seg031:15E8 retSI: ; CODE XREF: calcTime?Distance?+3C j seg031:15E8 ; calcTime?Distance?+7E j ... seg031:15E8 8B C6 mov ax, si seg031:15EA E9 1C FF jmp loc_29869 ; Jump Only for expert players! ;)
    1 point
×
×
  • Create New...