Posted September 10, 2021
Back in the day, two people on the filefront forum outlined a way to get something close to widescreen support on Bridge Commander, with working menus. I was able to find the posts and copy them to a word document. Hopefully this might help some of you get the chance to play the game on higher resolutions:
(kovacsn) Hi guys
I found a way to run BC in widescreen properly. I couldn't find anything on this forum or on BCFiles except the options.cfg hack, so I decided to solve the problem myself.
I'm going to post how I did it here. This is more of a howto than a mod, so forgive me if this is not the correct subforum.
Basically, the game thinks it runs in 640x480 when you set a custom resolution in options.cfg except when it checks the actual screen width. Unfortunately, I was unable to add a new resolution, as that seems to be hard coded into the exe, so I just hacked the 640x480 settings. This means that the 640x480 setting will no longer be usable.
What you'll need:
1. STBC 1.1 (obviously)
2. The sdk. Copy the scripts folder from the sdk to your bridge commander folder.
3. Good text editor. I recommend Notepad++
Note: I'll be using 1680x1050, but this procedure can be adapted to other resolutions as well.
Note 2: the files might be read only in which case notepad++ won't let you edit them. Just right click -> properties and uncheck read only at the bottom.
Note 3: In addition to the above problem, under vista / windows 7, you'll have to run notepad++ as administrator (right click -> run as administrator) to be able to edit the files. The option.cfg file will be located at C:\Users\Yourname\AppData\Local\VirtualStore\Progr am Files\Activision\Bridge Commander (yourname is your user name, the part after VirtualStore depends on where you installed the game)
• Open options.cfg and change Display Width and Display Height to the desired resolution. If you start the game now, it will crash to desktop (if you set Fullscreen Mode to 0, you will see a python console with the error message, this is what we'll fix next)
• Open scripts/Tactical/Interface/WeaponDisplay.py
You'll immediately see the problem: The *_BIAS arrays are hardcoded to the 5 supported resolutions, and can't accept any other parameters. Add another item starting with 1680 and copy the value from the 1600 line. Don't forget to add a comma to the 1600 line (the game will crash otherwise). E.g. for 1680x1050:
Code:
dTORP_X_BIAS = {
640: 1,
800: 1,
1024: 2,
1280: 3,
1600: 3,
1680: 3
}
dTORP_Y_BIAS = {
640: -7,
800: -7,
1024: -7,
1280: -7,
1600: -7,
1680: -7
}
dPHASER_X_BIAS = {
640: 1,
800: 1,
1024: 2,
1280: 3,
1600: 3,
1680: 3
}
dPHASER_Y_BIAS = {
640: -8,
800: -8,
1024: -8,
1280: -8,
1600: -8,
1680: -8
}
The game will now start, but the interface will be horribly cramped, because it thinks it's running in 640x480.
Unfortunately, this can't be solved without access to the game's source code, but it can be worked around by hacking the python scripts so that instead of drawing the interface for 640x480, they will draw it for 1680x1050. Fortunately the 1600x1200 interface is close enough so only a few modifications are needed (for 1440x900 the closest available interface is 1280x1024, but I haven't tried it).
• Go to scripts/Icons and rename LCARS_640.py (to back it up, since we'll be replacing it). Since the game thinks it's running in 640x480, this is the file it will load. But this file was meant for 640x480, hence the cramped interface. Make a copy of LCARS_1600.py (or LCARS_1280.py if you're using 1440x900), name it LCARS_640.py and open it.
• Go to line 158. You'll see something like 40.0 / 1600.0 and 104.0 / 1200.0 (depending on which file you copied, the divisors will be the screen height and width). Change these to SCREEN_PIXEL_WIDTH and SCREEN_PIXEL_HEIGHT respectively:
Code:
POWER_GAUGE_WIDTH = 40.0 / SCREEN_PIXEL_WIDTH
POWER_GAUGE_HEIGHT = 104.0 / SCREEN_PIXEL_HEIGHT
Now change the values in lines 27 and 28 to your screen width and height:
Code:
# Screen dimensions in pixels.
SCREEN_PIXEL_WIDTH = 1680.0
SCREEN_PIXEL_HEIGHT = 1050.0
• Go to line 207 and change LoadLCARS_1600 (or whatever it is depending on which file you copied) to LoadLCARS_640, then change LCARS_1600 below that to LCARS_640:
Code:
def LoadLCARS_640(LCARS = None):
and
Code:
LCARS = App.g_kIconManager.CreateIconGroup("LCARS_640")
If you start the game now, It will look much better, but the fonts will still be too small.
• Open scripts/Icons/SystemIcons.py and go to line 55. Change
Code:
return 0
to
Code:
return 4
(or 3 for 1440x900).
• Open scripts/MainMenu/mainmenu.py and change
Code:
g_iRes = 0
to
Code:
g_iRes = 4
everywhere (or 3 for 1440x900). These are lines 1236, 1323, 4463, 4509, 4537, 5897, 1226, 1313, 4453, 4499, 4527 and 5887.
This determines the font size, so you can experiment until you get something you like (just make sure you change all of them to the same value).
That's it. It's not perfect (the menu videos are missing for example), and I've only tested it in quick battle. Some single player missions do check the resolution, and I haven't tested them. They may crash. It also works with Kobayashi Maru, but the line number in SystemIcons.py is different, and the download only contained mainmenu.pyc, so I didn't change that.
Here are some screenshots. Enjoy!
Attached Images
ScreenShot000.jpg (213.3 KB, 603 views)
ScreenShot001.jpg (196.0 KB, 423 views)
(Freakydude) Might be reviving a dead post but after tweaking with the settings I finally found a way to get the menu videos to work as well.
• In the file scripts/MainMenu/mainmenu.py go down to line 6060
Code:
iWidth = int (App.g_kIconManager.GetScreenWidth ())
iHeight = int (App.g_kIconManager.GetScreenHeight ())
• Replace iWidth with the following options: 640, 800, 1024, 1280, 1600
• Replace iHeight with the following options: 480, 600, 768, 1024, 1200
Pick the size that fits best for you. My monitor is only 1280x800 so you will have to experiment if you have a 1680x1050 monitor. Anyways, I replaced iWidth and iHeight with the 1024x768 videos.
Code:
iWidth = 1024
iHeight = 768
If you did some digging around in data\Movies you'll find that the menu videos are named after the resolutions they fit in. That's why the videos wouldn't play since it couldn't find the correct name of the file.
Anyways, I did this and the videos played fine except for the Sovereign video at the bottom-left corner. For this, I went down to line 6101
Code:
if (g_iMovieSequenceID [0] == App.NULL_ID):
pSequence = App.TGSequence_Create()
pSequence.SetSurviveGlobalAbort(1)
iWidthTest = int (App.g_kIconManager.GetScreenWidth ())
pcMovieName = "data/Movies/IF_Sov" + str (iWidth) + str (iHeight) + ".bik"
This section of the code you can see uses the width and height to determine which movie to play. I found that it played the 1024x768 video but it didn't fit well with the menu. So, I let it play the larger video by adding this line.
Code:
if (g_iMovieSequenceID [0] == App.NULL_ID):
pSequence = App.TGSequence_Create()
pSequence.SetSurviveGlobalAbort(1)
iWidthTest = int (App.g_kIconManager.GetScreenWidth ())
iWidth = 1280
iHeight = 1024
pcMovieName = "data/Movies/IF_Sov" + str (iWidth) + str (iHeight) + ".bik"
I also tweaked the BC logo in the top-left of the menu to use the smaller version since the current one was too big for me. Simple edit here too. Some of you may not have to edit the logo but here's how I did it if you want to find out.
• Go to scripts/Icons/LCARS_640.py, the file that you changed earlier in kovacsn's guide and go to line 365
Code:
kTextureHandle = LCARS.LoadIconTexture('Data/Icons/BCLogo1280.tga')
LCARS.SetIconLocation(620, kTextureHandle, 0, 0, 190, 154)
I was using the 1280 resolution stats and to go to a lower version, I simply opened up the LCARS_1024.py file and copy-pasted the code to replace it:
Code:
kTextureHandle = LCARS.LoadIconTexture('Data/Icons/BCLogo1024.tga')
LCARS.SetIconLocation(620, kTextureHandle, 0, 0, 156, 118)
After all this, the menu looked great and the videos played fine. Of course these specs are with a 1280x800 monitor so you guys will have to experiment but it worked well for me. But what's all this without proof! I've included a screenshot for your viewing pleasure here.
Well, that's all folks. Have fun!
(kovacsn) Hi guys
I found a way to run BC in widescreen properly. I couldn't find anything on this forum or on BCFiles except the options.cfg hack, so I decided to solve the problem myself.
I'm going to post how I did it here. This is more of a howto than a mod, so forgive me if this is not the correct subforum.
Basically, the game thinks it runs in 640x480 when you set a custom resolution in options.cfg except when it checks the actual screen width. Unfortunately, I was unable to add a new resolution, as that seems to be hard coded into the exe, so I just hacked the 640x480 settings. This means that the 640x480 setting will no longer be usable.
What you'll need:
1. STBC 1.1 (obviously)
2. The sdk. Copy the scripts folder from the sdk to your bridge commander folder.
3. Good text editor. I recommend Notepad++
Note: I'll be using 1680x1050, but this procedure can be adapted to other resolutions as well.
Note 2: the files might be read only in which case notepad++ won't let you edit them. Just right click -> properties and uncheck read only at the bottom.
Note 3: In addition to the above problem, under vista / windows 7, you'll have to run notepad++ as administrator (right click -> run as administrator) to be able to edit the files. The option.cfg file will be located at C:\Users\Yourname\AppData\Local\VirtualStore\Progr am Files\Activision\Bridge Commander (yourname is your user name, the part after VirtualStore depends on where you installed the game)
• Open options.cfg and change Display Width and Display Height to the desired resolution. If you start the game now, it will crash to desktop (if you set Fullscreen Mode to 0, you will see a python console with the error message, this is what we'll fix next)
• Open scripts/Tactical/Interface/WeaponDisplay.py
You'll immediately see the problem: The *_BIAS arrays are hardcoded to the 5 supported resolutions, and can't accept any other parameters. Add another item starting with 1680 and copy the value from the 1600 line. Don't forget to add a comma to the 1600 line (the game will crash otherwise). E.g. for 1680x1050:
Code:
dTORP_X_BIAS = {
640: 1,
800: 1,
1024: 2,
1280: 3,
1600: 3,
1680: 3
}
dTORP_Y_BIAS = {
640: -7,
800: -7,
1024: -7,
1280: -7,
1600: -7,
1680: -7
}
dPHASER_X_BIAS = {
640: 1,
800: 1,
1024: 2,
1280: 3,
1600: 3,
1680: 3
}
dPHASER_Y_BIAS = {
640: -8,
800: -8,
1024: -8,
1280: -8,
1600: -8,
1680: -8
}
The game will now start, but the interface will be horribly cramped, because it thinks it's running in 640x480.
Unfortunately, this can't be solved without access to the game's source code, but it can be worked around by hacking the python scripts so that instead of drawing the interface for 640x480, they will draw it for 1680x1050. Fortunately the 1600x1200 interface is close enough so only a few modifications are needed (for 1440x900 the closest available interface is 1280x1024, but I haven't tried it).
• Go to scripts/Icons and rename LCARS_640.py (to back it up, since we'll be replacing it). Since the game thinks it's running in 640x480, this is the file it will load. But this file was meant for 640x480, hence the cramped interface. Make a copy of LCARS_1600.py (or LCARS_1280.py if you're using 1440x900), name it LCARS_640.py and open it.
• Go to line 158. You'll see something like 40.0 / 1600.0 and 104.0 / 1200.0 (depending on which file you copied, the divisors will be the screen height and width). Change these to SCREEN_PIXEL_WIDTH and SCREEN_PIXEL_HEIGHT respectively:
Code:
POWER_GAUGE_WIDTH = 40.0 / SCREEN_PIXEL_WIDTH
POWER_GAUGE_HEIGHT = 104.0 / SCREEN_PIXEL_HEIGHT
Now change the values in lines 27 and 28 to your screen width and height:
Code:
# Screen dimensions in pixels.
SCREEN_PIXEL_WIDTH = 1680.0
SCREEN_PIXEL_HEIGHT = 1050.0
• Go to line 207 and change LoadLCARS_1600 (or whatever it is depending on which file you copied) to LoadLCARS_640, then change LCARS_1600 below that to LCARS_640:
Code:
def LoadLCARS_640(LCARS = None):
and
Code:
LCARS = App.g_kIconManager.CreateIconGroup("LCARS_640")
If you start the game now, It will look much better, but the fonts will still be too small.
• Open scripts/Icons/SystemIcons.py and go to line 55. Change
Code:
return 0
to
Code:
return 4
(or 3 for 1440x900).
• Open scripts/MainMenu/mainmenu.py and change
Code:
g_iRes = 0
to
Code:
g_iRes = 4
everywhere (or 3 for 1440x900). These are lines 1236, 1323, 4463, 4509, 4537, 5897, 1226, 1313, 4453, 4499, 4527 and 5887.
This determines the font size, so you can experiment until you get something you like (just make sure you change all of them to the same value).
That's it. It's not perfect (the menu videos are missing for example), and I've only tested it in quick battle. Some single player missions do check the resolution, and I haven't tested them. They may crash. It also works with Kobayashi Maru, but the line number in SystemIcons.py is different, and the download only contained mainmenu.pyc, so I didn't change that.
Here are some screenshots. Enjoy!
Attached Images
ScreenShot000.jpg (213.3 KB, 603 views)
ScreenShot001.jpg (196.0 KB, 423 views)
(Freakydude) Might be reviving a dead post but after tweaking with the settings I finally found a way to get the menu videos to work as well.
• In the file scripts/MainMenu/mainmenu.py go down to line 6060
Code:
iWidth = int (App.g_kIconManager.GetScreenWidth ())
iHeight = int (App.g_kIconManager.GetScreenHeight ())
• Replace iWidth with the following options: 640, 800, 1024, 1280, 1600
• Replace iHeight with the following options: 480, 600, 768, 1024, 1200
Pick the size that fits best for you. My monitor is only 1280x800 so you will have to experiment if you have a 1680x1050 monitor. Anyways, I replaced iWidth and iHeight with the 1024x768 videos.
Code:
iWidth = 1024
iHeight = 768
If you did some digging around in data\Movies you'll find that the menu videos are named after the resolutions they fit in. That's why the videos wouldn't play since it couldn't find the correct name of the file.
Anyways, I did this and the videos played fine except for the Sovereign video at the bottom-left corner. For this, I went down to line 6101
Code:
if (g_iMovieSequenceID [0] == App.NULL_ID):
pSequence = App.TGSequence_Create()
pSequence.SetSurviveGlobalAbort(1)
iWidthTest = int (App.g_kIconManager.GetScreenWidth ())
pcMovieName = "data/Movies/IF_Sov" + str (iWidth) + str (iHeight) + ".bik"
This section of the code you can see uses the width and height to determine which movie to play. I found that it played the 1024x768 video but it didn't fit well with the menu. So, I let it play the larger video by adding this line.
Code:
if (g_iMovieSequenceID [0] == App.NULL_ID):
pSequence = App.TGSequence_Create()
pSequence.SetSurviveGlobalAbort(1)
iWidthTest = int (App.g_kIconManager.GetScreenWidth ())
iWidth = 1280
iHeight = 1024
pcMovieName = "data/Movies/IF_Sov" + str (iWidth) + str (iHeight) + ".bik"
I also tweaked the BC logo in the top-left of the menu to use the smaller version since the current one was too big for me. Simple edit here too. Some of you may not have to edit the logo but here's how I did it if you want to find out.
• Go to scripts/Icons/LCARS_640.py, the file that you changed earlier in kovacsn's guide and go to line 365
Code:
kTextureHandle = LCARS.LoadIconTexture('Data/Icons/BCLogo1280.tga')
LCARS.SetIconLocation(620, kTextureHandle, 0, 0, 190, 154)
I was using the 1280 resolution stats and to go to a lower version, I simply opened up the LCARS_1024.py file and copy-pasted the code to replace it:
Code:
kTextureHandle = LCARS.LoadIconTexture('Data/Icons/BCLogo1024.tga')
LCARS.SetIconLocation(620, kTextureHandle, 0, 0, 156, 118)
After all this, the menu looked great and the videos played fine. Of course these specs are with a 1280x800 monitor so you guys will have to experiment but it worked well for me. But what's all this without proof! I've included a screenshot for your viewing pleasure here.
Well, that's all folks. Have fun!
Post edited September 10, 2021 by MarsNeedsWomen