mbbsemu / MBBSEmu

The MajorBBS Emulation Project is an Open Source, Cross-Platform emulator for easily running The MajorBBS & Worldgroup Modules
https://www.mbbsemu.com
MIT License
129 stars 14 forks source link

[SFAYTZ] Yahtzee - Inputs not working correctly #55

Closed tuday2 closed 4 years ago

tuday2 commented 4 years ago

Module Information

Describe the bug Inputs not completely working - Score and Exit module work, partial/full rerolls do not "R123", "R12", "R1", "RA"

To Reproduce Steps to reproduce the behavior: Enter module, "S" works but not "R123" or "R12" or "RA" (roll commands), all other commands seem to work

Expected behavior Ability to "lock dice in" and roll for better results

Screenshots R)oll, S)core, Q)uit, or ? to re-display: R3

*** Invalid die number.

You can only roll die numbers 1 thru 5.

Example:

R)oll, S)core, Q)uit, or ? to re-display: R123

...will roll die numbers 1, 2, and 3.

Screenshots 2 RA

*** Invalid die number.

You can only roll die numbers 1 thru 5.

Example:

R)oll, S)core, Q)uit, or ? to re-display: R123

...will roll die numbers 1, 2, and 3.

To roll all the dice, enter: RA

Software Information:

tuday2 commented 4 years ago

{"UniqueIdentifier":"SFAYTZ","File":"SFAYTZ.DLL","Imports":{"DOSCALLS":[89],"PHAPI":[16],"MAJORBBS":[629,522,442,87,349,401,350,402,403,628,534,543,68,437,351,444,566,455,494,492,589,331,544,335,122,476,477,463,191,121,520,117,119,113,420,475,578,474,167,565,131,624,419,11,604,665,621,317,574,560,625,571,659,562,355,94,417,661,658,409,660,550,601,615,208,205,648,462,225,657,435,312,654,77,582,456,655,587,326,643,65,369,334,487],"GALGSBL":[7,21,36,72]}}

tuday2 commented 4 years ago

YAHError

enusbaum commented 4 years ago

Looked into this and MBBSEmu isn't handling CNCCHR(), MORCNC() and ENDCNC() properly.

For example, when SFAYTZ calls endcnc(), if there's more data in the buffer it's re-parsed and processed.

image

image

Based on the MBBS Developers guide, for endcnc() the remaining INPUT needs to be placed back into INPUT as if it was the text entered, and re-parsed using parsin().

image

I believe there are a couple things that need doing here:

  1. cncchr() needs to be fixed
  2. endcnc() needs to property place the remaining command string into INPUT
  3. parsin() should be moved from the Session Base and fully implemented in MAJORBBS
  4. parsin() needs to be called after endcnc() is invoked

... and then write unit tests to make sure it all works right ;)