Interrupt / systemshock

Shockolate - A minimalist and cross platform System Shock source port.
GNU General Public License v3.0
806 stars 65 forks source link

Crash when trying to use a Nitropack #93

Closed inguin closed 6 years ago

inguin commented 6 years ago

Trying to use a Nitropack crashes with a floating point exception (division by zero). Looks like the grenade timing deviation parameter is unexpectedly zero. Backtrace:

#0  0x0814a19e in RndRange (prs=0x81ac974 <grenade_rnd>, low=0, high=0)
    at /home/inva/Coding/git/systemshock/src/Libraries/RND/Source/rnd.c:173
#1  0x0810a1a9 in activate_grenade (osid=19) at /home/inva/Coding/git/systemshock/src/GameSrc/grenades.c:579
#2  0x080901dd in grenade_use_func (dp=0x81a9f30 <inv_display_list+80>, row=0)
    at /home/inva/Coding/git/systemshock/src/GameSrc/invent.c:1105
#3  0x08092e0d in inventory_mouse_handler (ev=0xffffce3a, r=0x843dba0, data=0x0)
    at /home/inva/Coding/git/systemshock/src/GameSrc/invent.c:2281
#4  0x0810ea63 in event_dispatch_callback (reg=0x843dba0, rect=0xffffcda6, v=0xffffce3a)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:410
#5  0x0810eb75 in ui_try_region (reg=0x843dba0, pos=..., ev=0xffffce3a)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:451
#6  0x0810ecbf in ui_traverse_point (reg=0x843dba0, pos=..., data=0xffffce3a)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:484
#7  0x0810ec80 in ui_traverse_point (reg=0x81dcbc0 <root_region_data>, pos=..., data=0xffffce3a)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:478
#8  0x0810ee14 in uiDispatchEventToRegion (ev=0xffffcf16, reg=0x81dcbc0 <root_region_data>)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:514
#9  0x0810ee95 in uiDispatchEvent (ev=0xffffcf16)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:527
#10 0x0810f523 in ui_dispatch_mouse_event (mout=0xffffcf16)
    at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:681
#11 0x0810f8d5 in uiPoll () at /home/inva/Coding/git/systemshock/src/Libraries/UI/Source/event.c:900
#12 0x0808ad3d in input_chk () at /home/inva/Coding/git/systemshock/src/GameSrc/input.c:389
#13 0x08095bd2 in mainloop (argc=1, argv=0xffffd034) at /home/inva/Coding/git/systemshock/src/GameSrc/mainloop.c:126
#14 0x08078899 in main (argc=1, argv=0xffffd034) at /home/inva/Coding/git/systemshock/src/MacSrc/Shock.c:164
Interrupt commented 6 years ago

I think I heard somewhere that System Shock had some kind of divide by zero interrupt handler installed that would ignore divide by zero errors. I wonder if this is expected behavior here, or if there is something else going on.