LTCHIPS / rottexpr

A Rise Of The Triad Source Port with additional gameplay options and more...
GNU General Public License v2.0
97 stars 27 forks source link

Support for more levels (Shareware Deluxe, ExtremeRoTT, etc) #15

Closed andrew-mcmahon closed 5 years ago

andrew-mcmahon commented 5 years ago

Is there any support for loading these extra levels in the Linux port?
I couldn't see any mention of this oversight on icculus.org.

GOG package the game with DOSBOX across all platforms.
A small setup utility is included to switch between game files - as was fairly typical from games of this era.
ROTT Setup 1 ROTT Setup 2

Without having this utility it doesn't seem possible? Just out of interest ECWolf, GZDoom, Quakespasm, eDuke32, etc - are all able to launch expansion content and - in some cases - generate a nice launch menu. It'd be a shame if ROTT didn't get the same treatment.

LTCHIPS commented 5 years ago

rottexpr does in fact support custom levels, but it appears that I haven't written down how to load them in the readme yet. Unfortunately, rottexpr doesn't have a nice GUI launcher like those source ports do, but I'm considering creating one...

Anyhow, here's what you need to do. If you're on linux, navagate to where your rott executable is, and launch rott with the filertl argument. For example, if I wanted to play the extreme levels, I'd do

rott filertl EXTREME.RTL

If you're on windows, make a shortcut to rott.exe and open properties on the shortcut. In the target textbox, after rott.exe add 'filertl level pack you wish to load'.

When I get a chance, I'll update the readme with all the launch arguments so that various features from the setup utility are at least usable in the meantime.

andrew-mcmahon commented 5 years ago

Thanks for replying and improving RoTT.

I'm using Arch and compiling from the latest sources (i.e. git clone https://github.com/LTCHIPS/rottexpr.git)

Adding filertl [filename] does indeed launch the extra levels (Extreme, UASpray and Wolf3D)

Although it appears that the game occasionally refuses to load the content from the RTL files either crashing on launch or continuing as normal without the addons loaded.

The console output seems to suggest my mouse is interfering with the process and/or that the filename isn't being handled correctly.

If there's any info or more commands I can use to help you narrow this down - don't hesitate to mention.
The overlay in my screenshots is due to GALLIUM_HUD; my general system specs are here.

EDIT I thought I'd try the original release (rott-1.1.2.tar.gz) with the launch argument above and I'm able to load RTC/RTL's reliably without any issue; something must've got broken somewhere...

LTCHIPS commented 5 years ago

Hey Andrew,

I tried out loading a level pack on an Ubuntu VM on my PC, and I appear to be having the same issue. Initially it was also reporting something about the VM's mouse (looked similar to your stdout you posted). To make sure that it wasn't something screwed up in my installation, I tried creating a small program that printed whatever was passed into the arguments. From that there didn't appear to be any bizzare changes with the argument like we're seeing with rottexpr.

Here's what I was getting on my end:

huntbgin.rtlID_INPUT=1.rtc not found, skipping RTL file

Thanks for taking the time to try things out with the original icculus port.

Edit: I changed the order of things that ROTT does during startup (now it checks for and loads custom RTL files before initializing input stuff) and I'm able to load levels such as the shareware stuff again. Try switching over to the bugfix branch and try out the bugfix. Let me know if it addresses the issue on your end.

andrew-mcmahon commented 5 years ago

The changes made in the bugfix branch don't quite seem to solved it.

My SDL libraries are up to date:

[mwnn@archlinux .rott]$ pacman -Q | grep sdl*
lib32-sdl 1.2.15-7
lib32-sdl2 2.0.9-1
lib32-sdl2_image 2.0.4-1
lib32-sdl2_mixer 2.0.4-1
lib32-sdl2_ttf 2.0.14-3
lib32-sdl_image 1.2.12-5
lib32-sdl_mixer 1.2.12-3
lib32-sdl_ttf 2.0.11-4
sdl 1.2.15-10
sdl2 2.0.9-1
sdl2_gfx 1:1.0.4-1
sdl2_image 2.0.4-2
sdl2_mixer 2.0.4-2
sdl2_ttf 2.0.14-2
sdl_gfx 2.0.26-3
sdl_image 1.2.12-5
sdl_mixer 1.2.12-6
sdl_ttf 2.0.11-5

I downloaded a fresh copy of the code using:
git clone --single-branch --branch bugfix https://github.com/LTCHIPS/rottexpr.git

Built the registered version of the game with make -j4

I also deleted the game's old config directory in: /home/mwnn/.rott

The game no longer crashes or complains on launch as it did before but the addons still don't load.

Actual gameplay is mostly unaffected by the changes except that the mouse is always turned off in the controls menu when re-launching the game.
If I manually change the config.rot & /darkwar/config.rot files it keeps reverting back! =)

Here's my console output:

./rott_registered filertl UASPRAY.RTL 
Rise of the Triad Startup  Version 1.4
 Commercial Version 
Z_INIT: 899950000 bytes
UASPRAY.RTLK� .rtc not found, skipping RTL file 
    Adding DARKWAR.WAD.
    Adding REMOTE1.RTS.
W_Wad: Wad Manager Started NUMLUMPS=3904
RT_DRAW: Tables Initialized
IN_Startup: Mouse Present
MU_Startup: 
SD_SetupFXCard: Fx ok.
SD_Startup: Fx ok.
RT_MAIN: Fonts Initialized
RT_MSG: Message System Started
RT_VIEW: Colormaps Initialized

It looks like some funny characters are still being appended onto the filename - could it be something like a Windows line break character?

If I try to force loading RTL or RTC files using filertc I get this instead:

[mwnn@archlinux RoTT]$ ./rott_registered filertc UASPRAY.RTL 
Rise of the Triad Startup  Version 1.4
 Commercial Version 
Z_INIT: 899950000 bytes
UASPRAY.cUK� .rtc not found, skipping RTC file  
UASPRAY.cUK� .rtc not found, skipping RTC file .rtc not found, skipping RTC file  
UASPRAY.cUK� .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file  
UASPRAY.cUK� .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file  
UASPRAY.cUK� .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file!.rtc not found, skipping RTC file  
realloc(): invalid next size
Aborted (core dumped)

[mwnn@archlinux RoTT]$ ./rott_registered filertc REJECTS.RTC 
Rise of the Triad Startup  Version 1.4
 Commercial Version 
Z_INIT: 899950000 bytes
REJECTS.cUK� .rtc not found, skipping RTC file  
REJECTS.cUK� .rtc not found, skipping RTC file .rtc not found, skipping RTC file  
REJECTS.cUK� .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file  
REJECTS.cUK� .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file  
REJECTS.cUK� .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file .rtc not found, skipping RTC file!.rtc not found, skipping RTC file  
realloc(): invalid next size
Aborted (core dumped)

Maybe I should run that small program you wrote?

...and btw don't get all stressed over this; it's not the end of the world =)

andrew-mcmahon commented 5 years ago

I'm pleased to say that https://github.com/LTCHIPS/rottexpr/commit/2b7c975f23cdafb982f2c958cd2c533f2c6db986 appears to have fixed this issue for good.

All of the single-player RTL files load first time without error.
As do the comm-bat RTC files. The mouse is detected/functions normally. You can load any of the RTL/RTC files using filertl or filertc depending on how you wish to use the maps.

You don't even particularly need to build the shareware version since you can load prequel campaign (HUNTBGIN.RTL/HUNTBGN2.RTL) in the registered version.

I'll play through it today but I think it's good enough to commit personally. Any strangeness on your end?

Got a primitive startup script that launches through a desktop shortcut - not very robust but does the trick for me.

#!/bin/sh
clear
echo "--- Rise of the Triad ---"
echo
PS3=$'\n'"Please enter your choice: "
options=("Full" "Shareware" "Custom" "Quit")
select opt in "${options[@]}"
do
    case $opt in
    "Full")
    ./rott_registered 
    break
    ;;
    "Shareware")
    ./rott_shareware
    break
    ;;
    "Custom")
    echo
    ls *.RTL
    echo $'\n'"Please type the name of the addon"
    read addon
    ./rott_registered -filertl $addon
    echo $addon
    break
    ;;
    "Quit")
    break
    ;;
    esac
done
LTCHIPS commented 5 years ago

Good to hear!

Anyways, seems like the string grabbed from the launch arguments didn't include a NUL terminated character to indicate the end of the string, hence the weird characters. I didn't have this problem on Windows, but went ahead and used snprintf instead of strcpy for copying the filename to the tempstr, which is to scan for the file. snprintf adds a NUL character at the end of the string automatically unlike strcpy. My Arch Linux and Ubuntu VMs aren't having problems anymore, so I'm going to consider the issue solved.

Appreciate the little launcher you whipped up there; when I get a chance I'll add it to the master branch.