Torus drive engages when no scanner present
Moderators: winston, another_commander, Getafix
- CommonSenseOTB
- ---- E L I T E ----
- Posts: 1397
- Joined: Wed May 04, 2011 10:42 am
- Location: Saskatchewan, Canada
Torus drive engages when no scanner present
I found what could be viewed as a bug in the hud.plist. In testing I left the main station with no scanner in the hud.plist and accidently engaged the torus drive while I should have been mass locked. Before I could react I was burning through the atmosphere and crashed just before I could pull up. I put the scanner back in and the problem disappeared. Wish I had an external pic just before the crash. That was kind of cool! Leave it in and we can have a scripted spectacular player crash caused by a torus drive malfunction.
Take an idea from one person and twist or modify it in a different way as a return suggestion so another person can see a part of it that can apply to the oxp they are working on.
CommonSense 'Outside-the-Box' Design Studios Ltd.
WIKI+OXPs
CommonSense 'Outside-the-Box' Design Studios Ltd.
WIKI+OXPs
- Eric Walch
- Slightly Grand Rear Admiral
- Posts: 5536
- Joined: Sat Jun 16, 2007 3:48 pm
- Location: Netherlands
Re: Torus drive engages when no scanner present
It is kind of a bug, yes. If an entity is mass_locking you, is determined within the code that draws the scanner. When that code is skipped there is no way to figure it out. The only thing you could do is always mass_locking without scanner. Somehow that even seems wise. At least I know from car driving that it is not wise to to drive at max speed when visibility is near zero...
UPS-Courier & DeepSpacePirates & others at the box and some older versions
- SandJ
- ---- E L I T E ----
- Posts: 1048
- Joined: Fri Nov 26, 2010 9:08 pm
- Location: Help! I'm stranded down here on Earth!
Re: Torus drive engages when no scanner present
That way leads to Health-and-Safety-gone-mad. What if your parking sensor packs up - would you want the car to refuse to allow 2nd gear? You'll be wanting seat belts next. And those heavy double-seal airlocks.Eric Walch wrote:The only thing you could do is always mass_locking without scanner. Somehow that even seems wise. At least I know from car driving that it is not wise to to drive at max speed when visibility is near zero...
Isn't it down to the ship's commander to decide what is best? That is, if the scanner gets jammed by solar flare, shouldn't the pilot get to choose whether to torus jump away? Or if the scanner is damaged by fire from pirates.
So it could be argue the Torus drive should not be disabled when there is no scanner.
Flying a Cobra Mk I Cobbie 3 with nothing but Explorers Club.OXP and a beam laser 4 proper lasers for company
Dropbox referral link 2GB of free space online + 500 Mb for the referral: good for securing work-in-progress.
Dropbox referral link 2GB of free space online + 500 Mb for the referral: good for securing work-in-progress.
- DaddyHoggy
- Intergalactic Spam Assassin
- Posts: 8515
- Joined: Tue Dec 05, 2006 9:43 pm
- Location: Newbury, UK
- Contact:
Re: Torus drive engages when no scanner present
In the standard game the scanner cannot be damaged (I asked for this several years ago so that systems which suffered from solar flares could be scripted to knock out the scanner) - so this effect only occurs when you do what CommonOTB did and not put the scanner in the hud.plist...
Oolite Life is now revealed hereSelezen wrote:Apparently I was having a DaddyHoggy moment.
-
- Quite Grand Sub-Admiral
- Posts: 6683
- Joined: Wed Feb 28, 2007 7:54 am
Re: Torus drive engages when no scanner present
It turns out that the drawScanner: method is a pretty freaking important one. Mass locking is affected by it and possibly also other stuff. However, a missing scanner entry in hud.plist should not result in changes to game behaviour so I would definitely accept it as a bug. I had a look at it and have some code for a fix, but I am not sure if this is the best way, so I present it to you for discussion. Here is the drawDials method, after the fix:
What happens basically is that as the HUD dials are drawn, they are checked for definition and if a scanner definition is found, then everything is cool, things are as expected. If no scanner definition has been found after all dials have been drawn, then the scanner is forced-drawn using a hard coded dictionary similar to the one in the default hud.plist, but at full transparency. So, the intended (or not) absence of scanner is achieved and at the same time mass-locking behaviour doesn't go in tilt.
If this is considered a non-too-hackish solution, I can commit it anytime. It seems to be at least simple enough to not cause too much disturbance to the codebase at this time. If there are other ideas out there, I'd be happy to hear them.
Code: Select all
- (void) drawDials
{
unsigned i;
BOOL isScannerDrawn = NO;
z1 = [[UNIVERSE gameView] display_z];
for (i = 0; i < [dialArray count]; i++)
{
[self drawHUDItem:[dialArray oo_dictionaryAtIndex:i]];
if ([[[dialArray oo_dictionaryAtIndex:i] oo_stringForKey:@"selector"] isEqualToString:@"drawScanner:"])
{
isScannerDrawn = YES;
}
}
if (EXPECT_NOT(!isScannerDrawn))
{
[self drawScanner:[NSDictionary dictionaryWithObjectsAndKeys: @"0.0", @"alpha",
@"0.0", @"x",
@"60.0", @"y",
@"-1.0", @"y_origin",
@"72.0", @"height",
@"288.0", @"width",
nil]];
}
}
If this is considered a non-too-hackish solution, I can commit it anytime. It seems to be at least simple enough to not cause too much disturbance to the codebase at this time. If there are other ideas out there, I'd be happy to hear them.
- CommonSenseOTB
- ---- E L I T E ----
- Posts: 1397
- Joined: Wed May 04, 2011 10:42 am
- Location: Saskatchewan, Canada
Re: Torus drive engages when no scanner present
As long as it has no effect on other scanners or anything else in the hud.plist and will never be visible it appears as a workable solution and mass-locks will still occur(as they should) so the game mechanics remain intact. The question I have is what else is tied into the scanner directly requiring it to be there? Maybe the long-term correct solution is to actually separate these other functions out. A big task probably but maybe worth it.
(thinks about eliminating fiery mass-lock related crashes...) I having a sad.
(thinks about eliminating fiery mass-lock related crashes...) I having a sad.
Take an idea from one person and twist or modify it in a different way as a return suggestion so another person can see a part of it that can apply to the oxp they are working on.
CommonSense 'Outside-the-Box' Design Studios Ltd.
WIKI+OXPs
CommonSense 'Outside-the-Box' Design Studios Ltd.
WIKI+OXPs
- Eric Walch
- Slightly Grand Rear Admiral
- Posts: 5536
- Joined: Sat Jun 16, 2007 3:48 pm
- Location: Netherlands
Re: Torus drive engages when no scanner present
The only alternative I see is not doing this check every time at draw time, but after setting up de dials. If the scanner in not amongst the objects, add your fully transparent version.another_commander wrote:If this is considered a non-too-hackish solution, I can commit it anytime. It seems to be at least simple enough to not cause too much disturbance to the codebase at this time. If there are other ideas out there, I'd be happy to hear them.
(At least did hiding the console by "Pause -> 'o' " not influence the mass-lock in the old situation.)
UPS-Courier & DeepSpacePirates & others at the box and some older versions
-
- Quite Grand Sub-Admiral
- Posts: 6683
- Joined: Wed Feb 28, 2007 7:54 am
Re: Torus drive engages when no scanner present
Both CommonSenseOTB and Eric are right. The proper fix here would probably be to separate the mass lock stuff from the scanner drawing, but I am very afraid of the consequences and possible bugs that may pop up if we attempt to do this just now. Also, the scanner identification checks are better done during initialization of the HUD dictionaries. This has been implemented in my codebase, it is definitely preferrable to doing the checks every frame and, if nobody objects, the fix in its current form will go in trunk later tonight.