View Issue Details

IDProjectCategoryView StatusLast Update
0000617FSSCPgameplaypublic2012-01-09 18:06
Reporterstarman01 Assigned Totaylor  
PrioritynormalSeveritytextReproducibilityalways
Status resolvedResolutionfixed 
Summary0000617: Directive text isn't displayed ingame
DescriptionHere is the problem :

When you create a directive-SEXP (the one with the red blip before the event) AND use a "is-event-true" trigger in it, the directive will not show up (in the white letters) ingame in the directive box.

BUT it is displayed (in blue or whatever hud-colour you use) once the directive is true or false. I guess this is only a minor problem for you guys :)
TagsNo tags attached.

Activities

WMCoolmon

2005-11-13 21:13

developer   ~0003818

I'm having some trouble with directive text showing too soon on the fourth training mission as well. It gives you the C-2-1-1 directive right when it starts.

Inquisitor

2005-11-25 16:05

administrator   ~0003934

Who created this SEXP?

Goober5000

2005-11-25 21:17

administrator   ~0003937

It's a retail sexp. It's probably a bug in the event system. IIRC taylor said a few days ago that he had a lead on it.

phreak

2006-01-09 19:21

developer   ~0004171

Has this been fixed?

starman01

2006-01-27 17:22

reporter   ~0004510

Last edited: 2006-01-27 17:22

*cough *bump* cough*
Any progress in this matter ? I'm still too dump to use variables to fix my problem, and with this bug solved I could received the wished effect in a very simple SEXP. :-)

edited on: 01-27-06 12:22

phreak

2006-01-29 18:45

developer   ~0004548

Is the same behavior displayed in retail?

starman01

2006-01-31 19:40

reporter   ~0004593

I'm not fully sure, but I think it is that way.

Goober5000

2006-02-01 06:06

administrator   ~0004602

Taylor, weren't you working on this a few months back?

CP5670

2006-02-06 08:14

reporter   ~0004672

I recently noticed this too in one of my missions. As far as I know, it didn't occur in retail FS2.

taylor

2006-03-16 23:53

administrator   ~0005148

I don't think I was working on this particular thing, but something similar. Someone will have to get me a test mission so I can work on this one though.

Shade

2006-04-26 19:13

developer   ~0005393

Think I've got this one nailed, expect a test build over the weekend when I've had time to test it properly for backwards compatibility.

taylor

2006-06-01 18:30

administrator   ~0005694

* BUMP *

Any update on the progress of this fix?

Shade

2006-06-04 16:01

developer   ~0005758

Still working on it. Trickier than I thought. I know how to make it display properly now at least, I just need to make it display without breaking anything else.

Goober5000

2006-06-04 18:33

administrator   ~0005761

I don't like the sound of that. Maybe we should start pulling old builds and find out when this bug was introduced.

Shade

2006-06-04 18:48

developer   ~0005763

Last edited: 2006-06-04 18:51

Yeah. Reason I haven't posted anything for committing yet, not safe just using a hack without knowing the underlying reason.

Reason it's complicated to fix properly is that the sexp itself (OP_EVENT_TRUE_DELAY) is not at fault, as it is identical to the retail code where this does not happen. Somewhere in the event system a change has been made that prevents this identical code from correctly identifying an event as being current, and that's what I'm trying to track down.

[Edit] PS, about committing: Anonymous account obviously won't let me. Should I drop you an email about it so I can get my earlier fixes in? (features I was working on are on hold until I get some of these bugs worked out)

edited on: 06-04-06 14:51

taylor

2006-08-29 03:28

administrator   ~0006512

* BUMP *

Any further update on this? It would be nice to have this fixed for 3.6.9. If Shade can provide more info on what he has found then I'll help track it down with him. Otherwise I really need a test mission that I can reliably replicate this with and then I'll take a look at it.

Shade_alt

2006-08-29 17:28

reporter   ~0006517

Last edited: 2006-08-29 18:25

(<-- Shade, problem with PW on old account after move to scp site. Thankfully it still sends me emails so I saw you posted)

It has stumped me so far, and unfortunately I haven't had time for coding (or anything, for that matter, but sleep and work) recently so I doubt I'll be able to change that before 3.6.9.

What I can tell you is that it is not the actual SEXP that is at fault - I've compared both OP_EVENT_TRUE/FALSE_DELAY and sexp_event_delay_status with retail, line by line, and they are identical.

I tried fiddling with the evaluation for setting sexp_useful_number to 0 in the OP part, thinking that how this was handled might have changed elsewhere, but it simply changes the problem rather than solving it (directive not showing up until completed/failed rather than showing up too early. That was expected but I was grasping for straws).

And that's about where I got stuck, as when I tried to figure out exactly how the whole sexp_useful_number thing figures into the greater whole my head kinda exploded. It doesn't seem to be used for anything but this sexp though.

[Edit] One thing of possible note is that I actually managed to recreate this bug in retail while I was working on it (I'll attach the mission). So are we absolutely sure it's not supposed to be this way? I haven't seen anyone conclusively state that yes, this worked differently in retail.

[Edit: Um, or I would attach, but uploads seem to be disabled atm. I'll attach it in the SCP forum on HLP instead]

edited on: 08-29-06 14:20

edited on: 08-29-06 14:22

edited on: 08-29-06 14:25

Goober5000

2006-08-29 20:25

administrator   ~0006519

Now wait a minute. If it has exactly the same behavior on retail as in SCP, then we can't change it. We have to maintain compatability.

I had thought this was a situation where something got changed from retail to SCP.

taylor

2006-08-29 21:04

administrator   ~0006520

The problem is that the event is never considered current and so is skipped over. This is traced directly to the Sexp_special_number thing since the event is only ever considered current if it's been evaluated as true. That's the only time that it will display. Not setting Sexp_special_number to 0 should change nothing game wise, but it could very well throw up a bunch of directives that probably shouldn't be there.

Goober may want to correct me on this, but I think that a proper fix would be to make a new sexp for this, which can always be current, or extent the current sexp to give the option of always current or not. In neither case will this change how the event is evaluated in a true/false way, only whether it's a current event. About the only real change to how it works will be that it gets a timestamp as soon as it's current rather than as soon as it's true. It would still have to evaluated as true or false to give an actual result, having it current only relates to how/whether it's displayed via the UI to the player.

Goober5000

2006-08-29 23:14

administrator   ~0006521

I figured as much. I'm just worried that it might start showing directives that were supposed to be hidden, like you said.

On the other hand, since this is definitely a bug, any campaign worth its salt should have worked around it. I can't think of any situation where changing this would cause unwanted behavior, but that doesn't mean one doesn't exist.

It might be worth putting out a test build, or even a test RC, with this bug fixed. We could ask several people to play through different campaigns to see if anything's different.

Adding a new sexp, say directive-test, would be the least invasive solution, but I'm averse to adding duplicate sexps if they can be at all avoided.

taylor

2006-08-29 23:56

administrator   ~0006522

I've tested a few of the original campaign missions and none of them have shown a problem. This is a specific circumstance though, since the change only affects is-event-true when used with a directive. In general there should be no change involved since nothing else really has interface related code for this to deal with. And as you say, the missions where this might be an issue should have been dealt with originally.

I'm up for a test build, so I'll do one up for Windows and give it out to a few people and mods to test with and we'll see what happens. Based on what I've tested and seen in the code though, I don't see this change being a problem, and it would fix the bug with no currently perceivable side-effects.

taylor

2006-09-01 05:05

administrator   ~0006525

The only reports I've had of the test build messing up are with FSPort. No bad reports from other mods or missions, they all appear to work as normal.

An easy test of the FSPort issue can be found with sm1-01a. "Return to base 2" will show up when the mission starts, and shows you the order to leave. The training missions are also prone to this same thing. I assume that this is something that we can fix without much issue. All of these cases see to use an "and", so I think (without being the sexp guru) we can check for that if the event-true check is part of a set then it will use the old behavior.

You know the sexp code better though, so is that doable without much trouble?

Goober5000

2006-09-01 12:39

administrator   ~0006527

Ugh. Setting aside the question of whether it's doable (I think it is), take a look at what's happening.

This is a use of this behavior that I hadn't considered. The directive is acting like a set of chained events: as soon as the "Mission End" event becomes true, the directive becomes valid. As soon as Alpha 1 departs, the directive is satisfied. So regardless of how poor a design decision this is, it's established precedent that's probably used in a bunch of FS1-era missions at least. (Do you see any comments in the code that indicate that this was what they were trying to do? It's quite possible that this was added before chaining.)

Conversely, we can't simply change behaviors based on an AND sexp because that leaves us with the original problem. A player could AND two event checks together, or he could use an event coupled with an is-departed-delay.

This galls me, but I think we'll have to add the directive sexp.

Shade_alt

2006-09-01 16:43

reporter   ~0006528

Changing anything regarding sexp_useful_number will definitely mess up things in certain missions. I tried it and went through a whole load of them hoping it was the solution, and it's what I was referring to when I wrote "I know how to make it display properly now at least, I just need to make it display without breaking anything else.".

The problem goes deeper than that, and frankly I'm not entirely sure it's fixable. As far as I could tell, this particular SEXP and the underlying functions that support it just aren't designed to take into account 'unresolved' in addition to true and false, and it will take some major reworking to make it function like normal directives. The sexp_useful_number is a major hack to begin with, and seems to only be there because whoever made these functions was pressed for time and could think of no other way to quickly make it work.

It can be quite easily FREDded around though, so frankly, as this does seem to be retail behaviour, I'd say leave it as is. If someone absolutely needs a SEXP with the other behaviour, my vacation time is almost here now so I should be able to add that in, but given that one can FRED around the problem I currently fail to see the need.

taylor

2006-09-01 17:36

administrator   ~0006529

I did look for comments after I noticed what was going on, but I didn't really see anything of interest. It just looks like the Sexp_useful_number thing was a hack to get around this issue specifically, and possibly extended to be used for other things. I can see no other reason that it would have issue. It does look like this is a FS1 era change though, and there just aren't that many FS1 era comments in the code still.

I tried playing around with AND to consider it a special chain (via a SFN_* flag) but that was so ugly that there is no way in hell that I'd commit that. The extra sexp might just have to be the way to go, however painful that may be.

FREDing around the problem is messy (or so I'm told), so that's not a valid option as far as I'm concerned. A new sexp isn't the greatest solution, but I think it's better than the alternative.

Goober5000

2006-09-01 18:21

administrator   ~0006530

FREDding around the problem isn't messy at all. I should know; I handle this sort of thing on a regular basis with ST:R. It's inconvenient, but it's not hard.

[Looking at the reporter] Ugh, should have known this was a WCS thing. No offense, but I think the WCS guys should learn how to use FRED. They tend to solve their problems as if they were looking for a sledgehammer to swat a mosquito.

Shade

2006-09-01 19:10

developer   ~0006531

Indeed. There are several way around it, none of them particularly messy or convoluted.

taylor

2006-09-01 19:40

administrator   ~0006532

So, do we just pass this off as something WCS needs to deal with, or go with the new sexps?

I've already got the sexps coded up (exactly the same as is-event-*, but with is-directive-*, to reduce new code handling) so I need to know if I should just scrap it or not. Or, if a new sexp is wanted, whether it needs to be more specialized than just as a UI related fix.

I have to say that I think this is just one of those crazy [V] things, and I don't really see a reason that we absolutely have to make FREDers work around it rather than offer another (perhaps more straightforward) solution. Regardless, this is by no means my area of interest nor expertise, so I'm just going to stand by and do what I'm told on this one.

Shade

2006-09-01 19:50

developer   ~0006533

Last edited: 2006-09-01 19:56

I don't mind a new sexp with the requested behaviour. But changing the old one in the way we're currently discussing (as I understand it) could potentially affect a few [V] missions by making directives appear too early.

edited on: 09-01-06 15:56

Goober5000

2006-09-01 20:23

administrator   ~0006534

WCS does need to deal with this, but the new sexps would be nice and quite convenient. However I don't think we need to make entire new sexps. What about simply tacking on an optional argument to is-event-* that would specify the new behavior? So we'd have:

is-event-true-delay
--"Some Event"
--0
--true

The optional boolean argument would determine whether the event uses the directive behavior or not.

If you could manage this, taylor, I think it would be the best solution. :)

taylor

2006-09-02 05:39

administrator   ~0006535

Works for me, I'd prefer just modifying the current is-event-* sexps as well. My main focus right now is trying to get the Theora player in working order (just needs audio, plus a good bit cleanup) but I should be able to take care of the sexp changes before the weekend is over, should only take a couple of minutes.

taylor

2006-09-08 05:06

administrator   ~0006559

Fixered.

Related Changesets

fs2open: fs2_open_3_6_9 r3501

2006-09-08 02:10

taylor


Ported: N/A

Details Diff
fix for Mantis bug 0000617 (with a very big assist from Shade who did most of the initial work on this)
Affected Issues
0000617
mod - /branches/fs2_open_3_6_9/fs2_open/code/parse/sexp.cpp Diff File

fs2open: trunk r3508

2006-09-08 02:18

taylor


Ported: N/A

Details Diff
fix for Mantis bug 0000617 (with a very big assist from Shade who did most of the initial work on this)
Affected Issues
0000617
mod - /trunk/fs2_open/code/parse/sexp.cpp Diff File

Issue History

Date Modified Username Field Change
2005-11-13 19:05 starman01 New Issue
2005-11-13 21:13 WMCoolmon Note Added: 0003818
2005-11-25 16:05 Inquisitor Description Updated
2005-11-25 16:05 Inquisitor Note Added: 0003934
2005-11-25 21:17 Goober5000 Note Added: 0003937
2006-01-09 19:21 phreak Note Added: 0004171
2006-01-27 17:22 starman01 Note Added: 0004510
2006-01-27 17:22 starman01 Note Edited: 0004510
2006-01-29 18:45 phreak Note Added: 0004548
2006-01-31 19:40 starman01 Note Added: 0004593
2006-02-01 06:06 Goober5000 Note Added: 0004602
2006-02-01 06:06 Goober5000 Assigned To => taylor
2006-02-01 06:06 Goober5000 Status new => assigned
2006-02-06 08:14 CP5670 Note Added: 0004672
2006-03-16 23:53 taylor Note Added: 0005148
2006-04-26 19:13 Shade Note Added: 0005393
2006-06-01 18:30 taylor Note Added: 0005694
2006-06-01 18:30 taylor Assigned To taylor => Shade
2006-06-04 16:01 Shade Note Added: 0005758
2006-06-04 18:33 Goober5000 Note Added: 0005761
2006-06-04 18:48 Shade Note Added: 0005763
2006-06-04 18:51 Shade Note Edited: 0005763
2006-08-29 03:28 taylor Note Added: 0006512
2006-08-29 17:28 Shade_alt Note Added: 0006517
2006-08-29 18:20 Shade_alt Note Edited: 0006517
2006-08-29 18:22 Shade_alt Note Edited: 0006517
2006-08-29 18:25 Shade_alt Note Edited: 0006517
2006-08-29 20:25 Goober5000 Note Added: 0006519
2006-08-29 21:04 taylor Note Added: 0006520
2006-08-29 23:14 Goober5000 Note Added: 0006521
2006-08-29 23:56 taylor Note Added: 0006522
2006-09-01 05:05 taylor Note Added: 0006525
2006-09-01 12:39 Goober5000 Note Added: 0006527
2006-09-01 16:43 Shade_alt Note Added: 0006528
2006-09-01 17:36 taylor Note Added: 0006529
2006-09-01 18:21 Goober5000 Note Added: 0006530
2006-09-01 19:10 Shade Note Added: 0006531
2006-09-01 19:40 taylor Note Added: 0006532
2006-09-01 19:50 Shade Note Added: 0006533
2006-09-01 19:56 Shade Note Edited: 0006533
2006-09-01 20:23 Goober5000 Note Added: 0006534
2006-09-02 05:39 taylor Note Added: 0006535
2006-09-05 19:01 taylor Assigned To Shade => taylor
2006-09-08 05:06 taylor Status assigned => resolved
2006-09-08 05:06 taylor Resolution open => fixed
2006-09-08 05:06 taylor Note Added: 0006559
2012-01-05 22:55 taylor Changeset attached => Import 2012-01-05 17:52:05 fs2_open_3_6_9 r3501
2012-01-05 22:55 taylor Changeset attached => Import 2012-01-05 17:52:05 trunk r3508
2012-01-09 18:06 taylor Changeset attached => fs2open_websvn fs2_open_3_6_9 r3501
2012-01-09 18:06 taylor Changeset attached => fs2open_websvn trunk r3508