The Making of Mt. Kurek - Part 1

Written by Jeff Walters

2nd Sequencer Charge Explosion

Overview - This event occurs not long after the first sequencer charge. The player plants a sequence charge at the heart of a reactor and the charge begins a 20 second countdown. When the player tries to escape a section of corridor weaken by the first explosion caves-in. Then the charge explodes sending a wall of fire rushing at the player. Once the wall of fire dissipates it becomes obvious that the reactor core area has caved. Shortly after the ceiling begins to shake. A niche in the wall is opened up and the player must climb in before the ceiling crashes down.

Map of Sequencer Charge Area
Map of Sequencer Charge area.

Now we'll examine how this was done step-by-step (NOTE - Knowledge of INF code is required.....this is for DF level authors after all). As I explained how to set a sequencer charge and enact a countdown last month, I'm skipping those parts this month.


Caveindummy - INF CODE
Pre-Explosion -
When the player plants the charge and then tries to escape down the corridor, he crosses a sector called Caveintrig (1 on map). Crossing this sectors sends a 'next_stop' message to an INF elevator called Caveindummy. Once set into motion, Caveindummy triggers the cave-in of two sectors - Cavein1 and Cavein2 (1a and 1b on map). Why, you may ask, isn't Caveindummy triggered when the player first comes down the corriror? This is because Caveindummy starts off with 'master :off', so basically it is triggered, but the 'master off' prevents Caveindummy from moving. Then when you plant the charge, a 'master_on' message is sent to Caveindummy.

Flamerdummy - INF CODE

Explosion -

When the countdown expires, the countdown elevator sends a 'next_stop' message to an elevator called Flamerdummy. On it's first stop, Flamerdummy sends 'next_stop' messages to the a sector called walloflame. This is the sector that creates the 'wall of fire' effect in the corridor(2b on map). This sector is a morph_move and once triggered moves rapidly to the left on the map to simulate the wall of fire. Two other sectors, explosion1 and explosion2 are also triggered. These elevators are very simple and there purpose is just to play the explosion voc.

Walloflame - INF CODE

When the 'walloflame' sector is triggered.....it does many things besdies just simulating the fire wall. On it's first stop it not only plays the explosion voc, but also makes the corridor sector a 'high damage' sector by setting the sector's #1 flag to 4096. The stop also triggers two sectors called walloflame1 and walloflame2 (2a and 2c on map) which, like walloflame, are morph_moves that shoot left to simulate the explosion. An elevator called powersound is sent a 'master_off' message. This message simply cancels the sound coming out of the reactor. The final thing this stop does is send a 'master_on' message to elevator 65536 of the sector firestorm(3 on map). This message results in the corridor's floor scrolling to the left extremely quickly......this creates the illusion that the player has been blown back against the wall.

Firestorm - INF CODE

When the Walloflame sector reaches it's next stop (so that it's pressed up against the sector 1b on the map), several things happen. First, a 'master_off' message is sent to the corridor sector (Firestorm) that stops' the floor scrolling. Then it sends 'next_stop' messages to seven morph_move sectors (named Crusher1 thru Crusher7 and labelled 4 on map) that are actually sub-sectors of the corridor. When triggered they move into place in the corridor (see red arrow coming out of 4). Why do these move into place now instead of starting the level there? Well, this is because if they'd started there, the explosion would look strange, because the walloflame sector would pass straight through them. This stop also makes the two morph_move doors (labelled as such on map) dissappear by basically moving them out of the corridor and into limbo. Another morph_move sector called caveseq2room (5 on map) is also moved into the corridor....it's purpose is to make it look like the reactor end of the corridor has collapsed. Finally a deep rumbling voc is triggered. After 4 secs at this stop, it moves on...

Flamerdummy - INF CODE

On the third stop, three things happen. Firstly, a clear_bit message is sent to the corridor sector to cancel the 'high damage' effect. Secondly, a master_on message is also sent to the corridor sector that triggers a 'change_light elevator' that drastically reduces the light level in the area. Thirdly a 'next_stop' message is sent to flamerdummy that in turn sends another 'next_stop' message to the Walloflame sector that causes the wall of flame to dissappear.

Caveinstart - INF CODE

On it's final stop before termination, the morph_move Walloflame returns back right and does two final things. First it sends a morph_move sector called Crusher8 (6 on map) into the corridor. The purpose of this sector in the end is the same as Crusher1, crusher2, etc......but it can only move now because before it's movement would have messed up the wall of flame because of it's location....it's complicated, but trust me :) This elevator's final act is to trigger a sector called Caveinstart which sets the Cave-in in motion . . .

Cave-in -

On it's first stop, Caveinstart does....absolutely nothing. It just waits for seven seconds. THEN it soes something :) Firstly, it sends a 'master_on' message to Firestorm that triggers both a move_ceiling and scroll_ceiling elevator that makes the ceiling of the corridor start to shake. Secondly it sends a sector called 'escape' to it's first stop.....and lastly a rumbling noise is triggered to complement the roof shaking.

Explosion
Uh oh...should have set a longer fuse

On the second stop the only thing done is that a 'master_off' is sent to Firestorm to halt the roof shaking. Over the next few stops the actions of the previous two stops are repeated so that the roof shakes, then stops, then shakes....etc. On it's last stop, Caveinstart triggers the cave-in by sending a next_stop message to Crusher1.

Crusher1 - INF CODE

As with the cave-in seen during the first sequencer charge explosion, it works in a sort of 'wave'. First Crusher1 is triggered by Caveinstart, it's roof then collpases and in turn triggers Crusher2, who's roof then collapses....and so forth. Hopefully by this stage the palyer has wisely decided to escape into the tunnel that opened up (the 'escape' sector).



If you delete any code by accident, just click reset.
Line

Clone Jedi's Entrance

Overview - This event directly after the second sequencer charge explosion. After Sate prestage talks to you, blue lightning and lasers shoot out of the roof and then clear revealing a clone Jedi.

One question I have been asked a few times since releasing the level, is how did I make the clone Jedi appear? Generators? Well, whilst generators could have been used, I found it easier to use a combination of the INF 'adjoin' command and just a normal move_floor elevator. Another reason why I didn't choose generators is something that level authors everywhere should remember - generators are big memory eaters!! If the level you're making is having memory problems and you're using many generators....then ditch 'em quick smart if possible.

Consequently I made TWO copies of the platform where the cloned Jedi appears. The first one is normal and adjoined to the rest of confrontation area......the second (the one that contains the Jedi) has exactly the same texturing, etc, except that it's floor height is 100 higher than the other one and it is not adjoined to anything. Why, some of you may be thinking, did I need to have the second sector 100 higher than the other one? This is because that for some reason when their floor heights were equal, the cloned Jedi would appear in the first sector.....even though I placed it in the second.....strange....obviously the DF engine has problems when two sectors share the exact same location.

Anyway, that is the reason that the second unadjoined sector starts 100 higher. When I wanted the Jedi to appear two things had to happen at exactly the same time -
  • 1 - INF 'adjoin' messages had to be used so that now the second copy of the platform sector is adjoined to the confrontation area instead of the first copy.
  • 2 - The floor height of the second platform copy has to move down 100 to be made equal with the first copy.....this is very simple and just requires a move_floor elevator moving at a speed of '0' (i.e. 0 = instantaneous).