Text File
===========================================================================
Advanced engine needed : ZDoom SVN revision 4204 -OR-
GZDoom SVN revision 1547 minimum
Primary purpose : Single player
===========================================================================
Title : Half-Life transitions
Filename : HLTRANS.PK3
Release date : 29 April 2013
Author : Ethan Watson aka GooberMan
Email Address : gooberman_mirag@hotmail.com
Other Files By Author : Doom - The Arcade Game release 1
Space Station Omega
Misc. Author Info : Wot ov it?
Description : The Half-Life style transitions I'm using in
Prime Directive (Space Station Omega's sequel),
but now in handy prefab format.
Additional Credits to : ReX for asking nicely for the scripts.
===========================================================================
* Play Information *
Executable needed : ZDoom SVN revision 4204 -OR-
GZDoom SVN revision 1547 minimum
(Obtainable from http://svn.drdteam.org/)
IWAD Needed : DOOM2.WAD
Map # : MAP01, MAP02
Single Player : Yes
Cooperative 2-4 Player : No
Deathmatch 2-4 Player : No
Other game styles : No
Difficulty Settings : No
New Graphics : No
New Sounds : No
New Demos : No
DEH Patch : No
* Construction *
Base : From scratch
Build Time : An hour to make the map and clean my scripts up
Tool(s) used : GZDoom Builder
Known Bugs : Decals and projectiles (and anything but the player)
don't get synced across maps. Known limitation.
Will Not Run With... : Half-Life (derp)
* General info *
ReX asked nicely earlier today if he could have my scripts. So I packaged them
up and decided to throw it up on /idgames while I was at it.
These scripts are pretty fragile, and it's easy to mess up the effect by
forgetting one little thing. So, I'm going to take a stab at trying to explain
what's going on here.
For this effect to work, you need to do the obvious "duplicate map sections
across different maps" thing. Another VERY IMPORTANT thing to do is to place
a map spot in the exact same position within the duplicate geometry. From this
point, I will refer to this map spot as an ANCHOR. The anchor is used in
conjunction with the actor that activates a map change. The anchor's position
is subtracted from that actor to create an offset. This offset is sent to
the next map via ACS calls. After changing the map, the ACS scripts trigger.
Using the anchor that mirrors the one in the previous map, the offset is
added to that anchor and the activating actor's position is set to this
new position.
Pretty simple, right? What could possibly go wrong?
To make the effect work, you need to take a two staged approach - call the
halflifetransition_start script using ACS_NamedExecuteWait; and change the
map yourself. halflifetransition_start specifically needs to be called with
ACS_NamedExecuteWait or the scripts WILL NOT EXECUTE BEFORE THE MAP CHANGE.
Changing the level yourself also needs to be called with two flags -
CHANGELEVEL_KEEPFACING and CHANGELEVEL_PRERAISEWEAPON. The pre-raise weapon
flag is a new addition to ZDoom at my request, and is not in any official
release as of the time this prefab was released (ZDoom 2.6.2 or higher; or
GZDoom 1.7.2 or higher will have them). You'll no doubt need to add
CHANGELEVEL_PRERAISEWEAPON to zdefs.acs yourself if you expect these scripts
to compile.
If you don't place things exactly right and call the scripts correctly, at the
minimum you can get disoriented. At worse, you will spawn outside of the map.
See? Fragile.
If you can tame it, however, what you have is a reasonably convincing seamless
level transition.
As you can imagine, though, since it only works on the actor that triggers
a level change it's not the perfect Half-Life transition you're hoping for.
I would like to delve in to ZDoom's code at some point and create a
sector-based serialiser so that the effect can take decals and other actors
in to account. Also of note is multiplayer. This example can be quite easilly
expanded to take multiple players in to account (hint: place all the player
starts outside of the sync zones, the player that causes the map change will
have a seamless transition while the other players will just show up in the
default start spots), but a sector-based approach would need a whole heap of
thinking to get around the overlapping players problem.
On a separate note, I'm releasing this under a Creative Commons 3.0 license -
specifically, the Attribution-NonCommercial-ShareAlike 3.0 Unported license.
The ancient and crusty copyright/permissions aren't quite watertight enough
in my opinion, especially considering some mapsets back in the day refused
permission to be distributed anywhere but the now-defunct forum/bulletin board
they were released on. The terms of the license should be compatible with
how Doom content has been distributed for the last almost-20 years, but with
significantly more clarity than was there originally. I'm hoping to lead by
example. I've always given my Doom work away, so at a base level nothing is
changing. It does, however, give anyone using the license solid legal ground
to stand on if someone is caught reusing without credit - a problem I noticed
happening all too often in some corners of the Doom community.
If you reuse the scripts, fear not. The Creative Commons is not like the GPL,
you don't have to license your entire mod with the CC license if you don't want
to. However, the sections you reuse from this archive need to be credited
correctly.
===========================================================================
* Copyright / Permissions *
All original work in this archive is released under the Creative Commons
Attribution-NonCommercial-ShareAlike 3.0 Unported license. In a nutshell,
it means you can copy this archive as much as you want. You are also free
to reuse any portion of this archive for non-commercial purposes as long as
you credit me and share any modifications made using the exact same license.
More info can be found at http://creativecommons.org/licenses/by-nc-sa/3.0/