New in version 0.8.1 ******************** 1. Changed the PM skin system code to be compatible with the CPMA skin system. Now Q3MIN uses the same Cvars, and CPMA style color definitions are accepted. This ensures that config files made for CPMA will work with Q3MIN (as far as the PM skin system is concerned). The only thing you have to adjust in your old config is the names of the models to use for enemy and for team members. New in update 0.8.0-1 ********************* 1. Added PM skin support (similar to the skin system implemented in the CPMA mod). For details see the file 'q3min_cvars.html' in the folder 'doc'. New in version 0.8.0 ******************** This is supposed to be a major stable version which should be in use for some time. List of changes: 1. Fixed incorrect version reporting, now both the server and the client report the correct Q3MIN version number. 2. Fixed the problem with the invisibility powerup (reported by PopeJo). The cause was some missing sprites accidentally removed from 0.7.1. :( 3. Added new CTF textures submitted by chiquita. 4. Added new sounds in categories 'feedback', 'items', 'teamplay' and 'world'. 5. Made new sounds for LG and RG hums and for the RG shot. They are now very similar to the original sounds in Q3A. 6. Added the freely distributable player models 'crakho' and 'sandra' (both female). Now we have enough player models (it is unlikely that anybody would want more than seven bots in a map). 7. Changed default master server name to 'master.ioquake3.org'. 8. Fixed the crosshair menu bug (incorrect crosshair picture was displayed). 9. Fixed weapon ranking bug (invalid error message when the Cvar 'cg_weaponRank' is the empty string ""). 10. Redesigned the build system for the game modules. Now everything is fully automatic. All you have to do is navigate to the folder where the source tree is isntalled and issue the command 'make'. Created a document describing how to set up the source tree and build the game under Win32 and Linux. 11. Added new female announcer voices (nice work by Chiquita and Caryn Law). These can be selected by setting the new Cvar 'cg_femaleAnnouncer' to non-zero (default is zero, i.e the original male announcer). 12. Added 'stepped' hit sound functionality. There is a new Cvar called 'cg_hitsound' (default value is '1', meaning that the normal hit sound is played). A zero value disables the hit sound. If you set this Cvar to '2', then one of three hit sounds (high, medium and low frequency) are played depending on whether the opponent you hit has 80 to 100, 20 to 80 or below 20 health, respectively. 13. Redesigned the map rotation system. In this version everything is done in the server code so the new map rotation system can be used with any mod that runs under Q3MIN. Client management code for the map rotation system has also been improved. For details see the section entitled 'sv_mapRotate' in the document 'q3min_cvars.html'. 14. Replaced the grenade launcher model (reason: I realized that the license of the previous model called M41A is not fully compatible with GPL). 15. Renamed the Cvar 'g_fastWeaponSwitch' to 'sv_fastWeaponSwitch' (to make it consistent with other server side Cvars) and changed its type to CVAR_SYSTEMINFO + CVAR_ROM (this means that its value is controlled by the server and the client is unable to change it. 16. Renamed the Cvar 'q3m_extensions' to sv_q3minExtensions' (to make it consistent with other server side Cvars) and changed its type to CVAR_SYSTEMINFO + CVAR_ROM (this means that its value is controlled by the server and the client is unable to change it. New in version 0.7.1 (EXE and VM update) **************************************** This is an update that converts an exisiting 0.7.0 installation to 0.7.1. Only the executable amd VM modules are replaced. No change in the config files is necessary to run the new version. The main reason for the update is that a comprehensive module checking mechanism has been added. This will (hopefully) prevent the dubious practice of mixing modules from different versions or even from different games (like Q3A and Q3MIN). This practice is a sure way to incompatibility and game crashes, and is a nightmare as far as code maintenance and bug fixes are concerned. The version of pak1.pk3 (VM modules) is checked by the server and client, while the version of server or client is checked by the VM modules when they are loaded. The name of the base game folder is also checked, renaming it is no longer allowed. If any of these checks fails, the game is aborted. In addition, a client version check is performed when a client attempts to connect. If the version of the server is newer than that of the client, connection is refused and the user is advised to upgrade. If the client is very old or not a native Q3MIN client (e.g. the original Q3A client is used) the connection is refused as well. New in version 0.7.0 ******************** This is supposed to be the next stable version (after 0.6.7). Here is the list of changes: 1. Restored the old map rotation system based on the 'vstr' mechanism. Now you can use it when you run a mod that cannot handle the new rotation system. 2. Renamed the base folder to 'baseqm'. [Note: Requested by chiquita: name must have the same length as 'baseq3' so that some hacks with mods work.] 3. Replaced CTF (teamplay) sounds with those from OA 0.7.0 (much better quality). 4. The game now does not attempt to load the 'arena.txt' file that was used for defining arenas for single payer mode. The corresponding error message is no longer displayed. [Note: The whole single player nonsense with all those tiers should be eventually removed from the menu system.] 5. Fixed the problem of slow client connection that occured in some situations (behind firewalls). The cause was an attempt to connect to the 'motd' server of id. Removed the relevant function call (not needed, Q3MIN is not Q3A). 6. Removed junk messages written to the logfile by the OpenAL module (you can see them again if you set the Cvar 'com_verbose' to non-zero). 7. Added new/updated sounds by chiquita (items, teamplay, word, weapons) and me (menu, teamplay, world). 8. Modified the mechanims by which the game checks if Q3MIN extensions are enabled or disabled (Cvar 'q3m_extensions', used for controlling features that change game play or physics). For details see the document 'imp_notes.txt' in the 'doc' folder of the source package. The Cvar is type serverinfo and cheat protected, so clients should not be able to tamper with it. New in update 0.6.9-1 ********************* This is an update to 0.6.9, to fix a few problems. No major changes have been made. 1. Replaced the client window icon (for Win32) with the proper Q3MIN icon. 2. Removed the previously added VM checking mechanism (based on magic numbers for VM modules). Added a new check that is based on the 32-bit CRC of 'pak1.pk3' (which contains the VM modules). If 'pak1.pk3' is missing or has an incorrect CRC, the game aborts with an error message. This check is performed at startup to detect if the EXE version does match that of the VM modules or not. 3. Added a new Cvar called 'q3m_extensions' (default value is 1). This can be set to zero to disable _all_ Q3MIN extensions that modify game play or physics (of course, programmers adding such features should honor this convention and disable them if this Cvar is zero). 4. Enabled Ogg/Vorbis support. Requested by Perle for his Q3rally mod. Compiled new Ogg and Vorbis DLLs for Win32 using MinGW. New in version 0.6.9 ******************** Note: This release must also be considered experimental (unstable) although I do not expect serious problems with it. It should be tested with different mods, with all new Q3MIN features enabled. These are the changes in the new version: ================================================================================= 1. Added a map rotation system for the dedicated server. Below is a description of how it works. [Note: This is a slightly simplified and improved version of the system that was present in the buggy version 0.6.8.] The map rotation system is activated by setting the Cvar 'sv_mapRotate' to the name of the CFG file that specifies the maps (see below). The default value of this Cvar is the empty string "" (no map rotation). If the map rotation system is activated, then after startup the server will load the first map specified and then it will rotate them using the order in which they have been specified. It is possible to specify a random order of rotation by setting the Cvar 'sv_mapRotateRandom' to non-zero (default value is zero). In this case the server will select the maps in a random order , but it is guaranteed that the same nap will not be selected twice in a row. The maps to be rotated should be specified in an ASCII text file (DON'T USE MS Word for making it!). The format of the file is the following: # Lines starting with '#' and empty lines are ignored. # Next is a map definition line: ... ... [up to 32 map definition lines] ... Explanation of terms used: = name of the map (w/o '.bsp') = game mode, must be one of the following: ffa team ctf insta-ffa insta-team insta-ctf = same as the corresponding Cvars = minimum and maximum number of players = skill of bots if they have to be added You may use spaces or TAB(s) as separators between the elements. In the normal case every parameter is specified for each map int the file. It is allowed, however, to omit some or all parameters. In this case the server will supply the following default values : gametype = ffa fraglimit = 15 timelimit = 15 minplayers = 2 maxplayers = 6 botskill = 3 (except for instagib where it is 5) There is one limitation: if you do want to specify a parameter explicitly, then all the previous parameters must also be present (no holes in the list). In the simplest case the map definition line consists of a single map name and all parameters have default vaules. Notes: A. Desired player counts (minimum or maximum) may not exceed the current value of 'sv_maxclients'. And of course 'minplayers' must not be larger than 'maxplayers' (it's OK if they are equal). B. The 'maxplayer' parameter is just a hint. It may not be possible to maintain it in some cases. For example, if the current map allows six players and there are actually six human players on the map, the server is not allowed to kick a human client even if the 'maxplayer' setting of the next map is lower. C. If 'maxplayer' human players are already on the map, then the server will not allow to connect another player even if the value of 'sv_maxclients' would allow another player. D. When map rotation is active, certain vote types (notably 'map', 'map restart', 'nextmap', 'g_gametype', 'timelimit and 'fraglimit' are disabled because they would interfere with the correct functioning of the map rotation system. E. The engine now has a way of identifying the QVM modules used. If the server detects that a mod created for vanilla Q3A is started, then the map rotation system is disabled to avoid incompatibility and crashes. Finally a simple example map rotation config file (the one I used for testing): # Test map rotation file aggressor ffa 5 5 2 4 4 hyperblast-q3 team 2 2 4 6 3 rpg3dm2 insta-ffa 2 2 3 6 5 ================================================================================= 2. Made new crosshairs which are very similar to the original crosshairs in Q3A and are in exactly the same order. ================================================================================= 3. Fixed the bugs that prevented the use of crosshair health color with all crosshairs except one (#9). Now it works for all crosshairs as intended. ================================================================================= 4. Added new hum sound for the LG submitted by Orbital-S2D. ================================================================================= 5. Added new logo (main menu background image). It is based on an image submitted by AllegedlyDead. ================================================================================= 6. Increased RG hum volume by 3 dB (for instagib). ================================================================================= 7. Replaced plasma bolt texture with new one submitted by jessicaRA. ================================================================================= 8. Added code to implement user defined crosshair colors. This is controlled by the Cvar 'cg_crosshairColor' (default value is the empty string ""). You may set this Cvar so that it contains the RGB components of the desired crosshair color like this: set cg_crosshairColor "R G B" where R, G and B must be floating point numbers in the range 0.0 to 1.0 (inclusive). Please note that in case if the Cvar 'cg_crosshairHealth' is non-zero, then setting a custom color for the crosshair is disabled (for obvious reasons). ================================================================================= New in version 0.6.8-1 ********************** Note: This release under a slightly different version number was necessary because the original release of version 0.6.8 was broken (mod support and other problems). These problems are (hopefully) fixed in the present version. Still, it is considered an EXPERIMENTAL (unstable) version until proven otherwise. =================================================================================== 1. Added icons for red/yellow armor, medkit and regeneration submitted by a_clown. 2. Added 'oasago2j' (enhanced version by Clown and Joki) as the standard CTF map included in the distro. Modified flag models and textures to show Q3MIN logo. :) 3. Modified arena files. 'aggressor' is now the standard tourney map while 'rpg3dm2' is the standard map for FFA and TEAM matches. 4. Corrected the issue with the texture/shader 'wsupprt1_12'. There was a mistake, the file names had an extra character like this: 'wsupport1_12'. Now it works OK. 5. Added new RG hum sound made by chiquita, it is less irritating (similar to the sound in Q3A). 6. Added new railcore texture submitted by chiquita. RG trace visibility is much better now. 7. Renamed the Cvar 'sv_fastWeaponSwitch' to 'g_fastWeaponSwitch'. Otherwise it works as previously described. 8. Added a new Cvar called 'com_verbose' (default value is zero). Unless it is set to a non-zero value, a lot of junk messages (mostly from the SDL module) are suppressed. Log file size shrank to one-third, it is much easier to find important messages (those are not suppressed of course). 9. Fixed the CTF flag bug reported by several people. Now the flag can be picked up and returned normally. 10. The dedicated server now looks for a config file called 'server.cfg' instead of the usual 'autoexec.cfg'. You can keep separate atuomatically run configs for both the client and the server in the same folder w/o any interference. NOTE: experimental feature, very easy to revert (affects only the EXE files). 11. Added a way to check if the server is started using the 'official' Q3MIN VM modules. If not, a flag (Cvar) is set. New features can now be coded in such a way that they are automatically disabled if this falg is set. [In the present verson this mechanism has not been used, but it is there so that coders submitting patches may take advantage of it.] The same checking mechanism is also used to detect when the version of the VM modules in the base game folder do not much the version of the executables. In this case the game aborts with a proper error message. Of course we developers have a secret way to disable checking. But I am not going to tell you! {script: insert evil laughter here} ;) 12. Added patch by a_clown to draw player speed if the Cvar 'cg_drawSpeed' is set to non-zero. 13. Renamed the base game folder to 'baseq3m'. I believe that this is the right thing to do. We should not create the impression that Q3MIN is Quake III Arena. AFAIK every standalone game based on the ioq3 engine honored this convention, so we should, too. New in version 0.6.7 ******************** 1. Ported the 'unlagged' code from the previous code base (the one I got from the Openareana WEB site). The source can be compiled w/o errors and the client & server seem to work OK. 2. Added the improved models/textures from Chiquita's updated replacement package 'z-gpl-q3a2oa-textures'.Many models haev been updated and look much better now. 3. Added my own 'instagib' mode. It is a fairly simple-minded (but IMO quite adequate) implementation. This mode can be used in combination with the other game modes already implemented, i.e. FFA, team and CTF. When this game mode is used, the following game play rules are added: - you spawn with the railgun and have unlimited ammo - no pickup items are allowed in the maps except the haste, flight and invisibility powerups as well as the team flags in CTF - a single hit from the railgun instantly kills the opponent The mode can be activated by setting the Cvar 'sv_instagib' to non-zero (the default value is zero). To add some flexibility, the fire rate (delay between shots) can be controlled by setting the Cvar 'sv_instaFireDelay' to any value in the range 500 to 1500 (these are milliseconds, so it comes to 0.5 to 1.5 seconds). The value is checked and forced into this range if necessary. The default value is 1500 (same as in the original game). Note: Bots are rather lame in instagib unless you set their skill to 5. Then they give a decent fight. 4. Added a second map to pak0.pk3. It is the original (for Q3A) version of 'rpg3dm2'. This map is significantly larger than 'aggressor' and is suitable for matches with up to 8 players. 5. Renamed the previously created Cvar 'cg_noBob' to 'cg_noItemBob' to avoid confusion. 6. Checked the textures 'pewter.tga' 'baslt4_1.tga' 'ceil1_39.tga' 'proto_light.tga' 'trianglelight.tga' and 'trianglelight.blend.tga' (caused warning mesages). 7. Corrected the texture 'wsupprt1_12' that caused shader error message. 8. Added the patch 'Draw user string' submitted by mathieu. There is now a new Cvar called 'cg_drawDateTime' (default value is zero). If you set this Cvar to a value in the range 100 to 110, the curent time and/or date is displayed in the upper right corner of the screen. The following formats are produced by the different Cvar values: 100 -> hour:min:sec (12-hour format) 101 -> hour:min:sec (24-hour format) 102 -> month:day:year 103 -> month:day:year + hour:min:sec (12-hour format) 104 -> month:day:year + hour:min:sec (24-hour format) 105 -> day:month:year 106 -> day:month:year + hour:min:sec (12-hour format) 107 -> day:month:year + hour:min:sec (24-hour format) 108 -> year:month:day 109 -> year:month:day + hour:min:sec (12-hour format) 110 -> year:month:day + hour:min:sec (24-hour format) 9. Added the patch 'Client details' submitted by uzu. The code writes to the log additional data (port, IP address and GUID) when a client connects. 10. Added the patch 'Custom frag message' submitted by uzu. There is now a new Cvar called 'cg_fragString' (default value is the empty string ""). If the Cvar is not empty, then its content is used to replace 'You fragged..." in the message displayed when you kill someone. 11. Added the patch 'Log server time' submitted by uzu. The current time at the start of game initialization is now written to the file 'games.log'. 12. Added a Linux client binary (I compiled it under Zenwalk Linux 5.2, a Slackware clone). Please, whoever has a Linux machine properly set up with a 3D card and working drivers, test it. I had some problems: the game started OK, played very slowly (no 3D acceleration) and when I quit I didn't get back the window manager GUI. It was not a crash since I was able to go to console mode using Alt+Ctrl+F2, but the window manager was dead and unresponsive (even Ctrl+Alt+Del did not work). NOTE: 'pak0.pk3' has been split, now there is also a 'pak1.pk3'. This new PAK contains the VM folder with the QVM modules, and nothing else. The reason for the change is that the game modules seem to change much faster than the artwork in the rest of the PAK. This is especially true now that chiquita's last texture / model updates have been added. Right now there does not seem to be any major contribution coming to the artwork in the near future. :( By using split PAK archives it is much easier to update the game when the code is changed (patches applied, new stuff addded). New in version 0.6.6 ******************** 1, Removed all code related to missionpack/TA (including the TA weapons nailgun, proximity mine and chaingun). That means about 350 KB less code and no '#ifdef MISSIONPACK / #endif' sections complicating the source modules. Note: The original code (with missionpack/TA) is still present in the source archive in a ZIP file called 'code-MP.zip' (in case if you wish to use it). However, from this point on only the MP-free code base will be updated with the new additions. 2. Added new icon for the client and server. Well, I can't say that it is a materpiece of graphics editing, but at least we don't have to use the OA icon any more. 3. Added proper title strings for the windows of the client and server. 4. Added a new Cvar called 'cg_noBob' (default value is zero). If you set this Cvar to non-zero, the annoying up/down bobbing of items is stopped. (It is mainly for me, I hate this stupid bobbing.) 5. Added a new Cvar called 'cg_noMedals' (default value is zero). If you set this Cvar to non-zero, the various medal icons (excellent, impressive, etc.) are not displayed over the models' head. (It is mostly for me, I hate those stupid childish medals. :) ) 6. Changed how max ammo is handled. The values are not hard coded now. Instead there is a new server side Cvar called 'sv_maxAmmo' (default value is the empty string ""). You can specifiy the maximum amounts of ammo for the different weapons by setting this Cvar as follows: set sv_maxAmmo "A B C D E F G H" where 'A' to 'H' are the max ammo counts for the weapons. Please note that the order of amounts specified must be the same as the default order of the standard weapons (i.e. MG, SG, GL, RL, LG, RG, PG and BF) and there must be exactly one value for every weapon. If the Cvar is left empty ("") the maximum amount of ammo for every weapon is uniformly 200. New in version 0.6.5 ******************** Note: The game engine is now based on the latest source code available from 'icculus.org' (that is, version 1.36 revision 1582). 1. Maximum amount of ammo is now separately specified for each weapon. The amounts are as follows: MG 100 (50 for teamplay) SG 50 GL 20 RL 20 LG 100 RG 20 PG 100 BF 10 This is hard coded, the engine must be recompiled to change the values. 2. Made the BFG somewhat weaker. Since complete removal from the code is fairly complicated, and the absence of BFG may cause problems with maps that include this weapon, I decided that it should stay but should be only slightly more powerful than the RL. This is achieved by setting the damage of BFG to half the value of the RL (both direct hit and splash damages). The fire rate of BFG is much faster, so the lower damage values are compensated. The BFG is further weakened by allowing only 10 missiles as maximum load. I believe that BFG rampages are no longer possible with these settings. 3. Added optional instant weapon switching. This is controlled by the server side Cvar called 'sv_fastWeaponSwitch', If this is set to non-zero, your weapon change will become (almost) instantenous (actually about 10-15 ms). Default value of Cvar is zero, this results in the original 300-400 ms change time. Please note that for technical reasons in some situations (notably when the current weapon was just fired) the change takes a bit more time. For example, when you fire the railgun or the rocket launcher and immediately change the weapon, the switch does not occur until the previous weapon becomes ready. This has probably something to do with weapon & torso animation. May do an effort to fix this later if it is considered a serious problem. 4. A weapon dropped by a killed player contains only the actual amount of ammo the player had at that point. 5. A new client command 'drop N' has been added. This will drop the weapon 'N' (use the standard weapon numbers). The dropped weapon will contain the actual amount of ammo the player has at that point. The player who droppped the weapon can pick it up again. Weapon dropping also works in FFA game mode. Limitations: - you cannot drop your current weapon - you cannot drop an empty weapon (no ammo) - the weapon cannot be picked up for about 0.4 seconds after dropping (for technical reasons) - the dropped weapon will disappear after 30 seconds 6. Rocket speed is increased to 1000 from the original 900. Let me know if you want more... :) 7. Railgun damage is reduced to 80 per hit. [BTW, this is a bit controversial to me. The high damage value of RG is tempered by the fact that you have to wait 1.5 seconds between shots. So if we reduce damage, we should probably also decrease the delay between the shots. Opinions?] New in version 0.6.4 ******************** 1. Copied the GPLed map 'aggressor' (and its supporting textures and shaders) from Openarena 0.8.1. Removed the map 'ztn3dm1'. Now all stuff in the Q3MIN archive is strictly GPL. 2. Ported my code for weapon grouping and ranking to Q3MIN (from a previous source mod of mine). The order of weapons (i.e. their 'rank') is controlled by a new Cvar called 'cg_weaponRank' (default value is the empty string ""). The default means that the order (ranking) of weapons is the same as in the original game. You may specify a different weapon order by setting this Cvar as follows: set cg_weaponRank "w1 w2 w3 w4 w5 w6 w7 w8 w9" where w1, w2, etc. are weapon ID strings from the following sets: ga mg sg gl rl lg rg pg bf GA MG SG GL RL LG RG PG BF There must be exactly nine weapon IDs, one for each weapon. The order of weapons in the game will follow the order in which they appear in the Cvar's string. The standard weapons available in the game (from gauntlet to BFG) are now divided into weapon groups. There are four groups and there may be up to four weapons in each group. The default grouping is as follows: Group 1: LG PG SG close quarter fighting Group 2: RG MG LG middle to long range, instant hit Group 3: BF RL GL explosive projectiles, self-damage Group 4: GA best left alone :) Four additional Cvars are provided for overriding the default definitions of weapon groups: cg_weaponGroup1 cg_weaponGroup2 cg_weaponGroup3 cg_weaponGroup4 The default value for these Cvars is the empty string "". You may set any of them in the same way as 'cg_weaponRank' above. For example: set cg_weaponGroup2 "RL LG SG" This will redefine weapon group 2 to have the rocket launcher, the lighntning gun and the shotgun. You may add up to four weapons to each group, but no group may contain the same weapon twice. Weapons in the groups should be specified in a descending order (most powerful listed first, this is the order of selection within the group). If you set the Cvar to "" then the corresponding weapon group becomes undefined (empty). The command 'weapon N' has been extended to take advantage of weapon grouping. It accepts arguments in the range 101 to 104. These numbers correspond to the four weapon groups. Passing the number of a weapon group (+ 100) results in the following actions depending on which weapon you currently use: - if your current weapon is in the indicated group, the next available weapon from the same group is selected - if your current weapon is from anotber group, the best weapon available in the indicated group is selected, but if no weapon in that group is curently available then no change is made If the ammo of your current weapon runs out, the game tries to select the best available weapon from the same group. If that is not possible, then the best available weapon from the full set is selected. The working of the commands 'weapnext' and 'weapprev' can also be changed by setting the new Cvar 'cg_newWeaponSelect' to non-zero (default is zero). Zero means that weapon selection works in the same way as in the original Q3A game. A non-zero value causes weapon selection to be changed: the commands do not wrap around (they stop at the respective end of the weapon list) and the gauntlet can also be selected. New in version 0.6.3 ******************** 1. Ported my code for UT-style smooth zooming to Q3MIN (from a previous source mod of mine). In order to use this new zoom technique, you should set the new cvar 'cg_newZoom' to non-zero. In this case the old zooming commands are disabled and the following new commands become available: togglezoom toggle between zoomed and normal views +zoomin increase zoom factor while zoomed +zoomout decrease zoom factor while zoomed Retains the last set zoom factor between zoom activations. A new telescope-like crosshair is used with the new zooming scheme. Try it, IMO it is better than the original simple zoom. Please note that this works only with the railgun (the only truly precise long-range weapon). Zooming in the new scheme is not allowed if you currently hold some other weapon. Note: This limitation may be removed if the majority thinks it inappropriate. I believe that it's more realistic this way, but let's hear you votes! 2. Replaced the crosshairs ('a' to 'i', i.e. 1 to 8) with better ones resembling the original ID crosshairs. 3. The package now includes a Linux dedicated server binary. Please, test the server! 4. Modified file system initialization. Added a new Cvar called "fs_multiuser". If this Cvar is set to non-zero, then the game will use user specific folders in the 'Documents and Settings" system directory for storing config files and other stuff. Otherwise the install directory of the game is used (old behavior, before XP). The Cvar should be set on the command line to have the desired effect. This works only under Windows XP. Under Linux everything is as before.