aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Zickner <[email protected]>2005-05-20 12:15:06 +0000
committerHolger Zickner <[email protected]>2005-05-20 12:15:06 +0000
commit420f17400c3565c9c9810415cb3cd3420a19434c (patch)
tree945c67f00da5ab5653e5023d389e7e930d34ffb4
parent9ce8c403043666c8ce6816332bb96412b0c5f028 (diff)
remove test and info in release branch
-rw-r--r--.classpath1
-rw-r--r--info/ent_structure.txt392
-rw-r--r--test/AdapterRegister.java104
-rw-r--r--test/ConvertDefines.java138
-rw-r--r--test/Unpack.java202
-rw-r--r--test/jake2/client/CircleListener.java61
-rw-r--r--test/jake2/client/GhostMouse.java49
-rw-r--r--test/jake2/qcommon/TestCMD.java55
-rw-r--r--test/jake2/qcommon/TestCOM.java53
-rw-r--r--test/jake2/qcommon/TestCvar.java41
-rw-r--r--test/jake2/qcommon/TestINFO.java40
-rw-r--r--test/jake2/qcommon/TestLoadGame.java36
-rw-r--r--test/jake2/qcommon/TestLoadMap.java34
-rw-r--r--test/jake2/qcommon/TestMD4.java1174
-rw-r--r--test/jake2/qcommon/TestMSG.java66
-rw-r--r--test/jake2/qcommon/TestRotatePointAroundVector.java185
-rw-r--r--test/jake2/render/DancingQueens.java243
-rw-r--r--test/jake2/render/DebugCulling.java238
-rw-r--r--test/jake2/render/DisposeBuffer.java45
-rw-r--r--test/jake2/render/TestMap.java538
-rw-r--r--test/jake2/render/TestRenderer.java754
21 files changed, 0 insertions, 4449 deletions
diff --git a/.classpath b/.classpath
index ca67bd1..7c16b09 100644
--- a/.classpath
+++ b/.classpath
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
- <classpathentry kind="src" path="test"/>
<classpathentry kind="src" path="patch"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/joal/linux/joal.jar"/>
diff --git a/info/ent_structure.txt b/info/ent_structure.txt
deleted file mode 100644
index 394ccef..0000000
--- a/info/ent_structure.txt
+++ /dev/null
@@ -1,392 +0,0 @@
-Written by Davo ([email protected])
-(parts marked //kami0 supplied by Michael 'kami0' DiGiovanni ([email protected]))
-
-These are the attributes which all entities have. This is an explanation of the type
-'edict_t'. Attributes are referenced by the format 'entity_name->attribute' (eg self->angle)
-
-Many of these will be familiar to QuakeC programers.
-
-NOTE - Not all of these are relevant to all entities (infact there are no entities
-for which all of these are relevant).
-
-name type notes
-
-absmin, absmax vec3_t position of min and max points of entity
- relative to the world's origin
-accel float acceleration of platforms
-activator edict_t * entity which activated the current entity
-air_finished float time when air will run out (when underwater)
-angle float entity yaw set by level editor (-1 = up; -2 = down)
-area link_t ?
-areanum, areanum2 int area where you currently are used when
- checking if monsters can hear sounds
-attenuation float attenuation of above sound (set at level edit)
-avelocity vec3_t angular velocity (see note for velocity)
-blocked void function to call when blocked? (optional)
-chain editc_t * used when creating a list of entities
-classname char * type of entity (eg 'player','monster_soldier')
-client struct gclient_s* points to the player controling it, NULL
- if not player controled
-clipmask int type of objects the entity will not pass through
- can be any of MASK_* or CONTENTS_* listed at bottom
- of this document
-clusternums[] int ?
-combattarget char * name of entity to attack (used once)
-count int general purpose 'amount' variable, often set in level editor
-damage_debounce_time float time when lava/slime can do more damage to player
-deadflag int state of deadness :
- DEAD_NO, DEAD_DYING, DEAD_DEAD, DEAD_RESPAWNABLE
-deathtarget char * name of entity to use when current entity dies
-decel float deceleration of platforms
-delay float time between triggering switch and effect activating
-die void function to call when health <= 0 (MUST be present if the
- entity can take damage)
-dmg int damage done by entity
-dmg_radius float area to do radius damage
-enemy edict_t * entity to attack
-flags int various attributes :
- FL_FLY -flying
- FL_SWIM -swimming, won't drown
- FL_IMMUNE_LASER -not hurt by laser
- FL_INWATER -set when entering water, cleared when
- leaving
- FL_GODMODE -god-mode on
- FL_NOTARGET -will not be targeted by monsters
- FL_IMMUNE_SLIME -not hurt by slime
- FL_IMMUNE_LAVA -not hurt by lava
- FL_PARTIAL_GROUND -ground pulled out from under monster
- FL_WATERJUMP -player jumping from water
- FL_TEAMSLAVE -not first member of a team
- FL_NO_KNOCKBACK -entity not thrown back by damage
- FL_POWER_ARMOR -active power armor
- FL_RESPAWN -entity waiting before re-spawning
-fly_sound_debounce_time float used with looping sound when pushing player (in_trigger.c)
-freetime float time when entity was freed-up in memory
-gib_health int health at which to gib :)
-goalentity edict_t * entity currently moving towards
-gravity float not used by any entites, but can be used to define reduced/
- increased gravity for individual entities (normal=1.0)
-groundentity edict_t * what the entity is standing on
-groundentity_linkcount int used in conjunction with linkcount to see if the current
- entity is still standing on the groundentity
-headnode int ?
-health int health of entity, increased and set in many places, but
- should only be reduced by t_damage()
-ideal_yaw float yaw the entity wants to face
-inuse qboolean the entity exists in the world
-item gitem_t * info about item (see below)
-killtarget char * name of entity to remove when current entity triggered
-last_move_time float time to play earthquake sound again
-light_level int player's light level, used by monsters when checking if
- player can be seen
-linkcount int changed by the gi.linkentity function ?
-map char * filename of the next map, part of entity target_changelevel
-mass int used when pushing entites and calculating knock-back for
- weapons (eg rocket hits)
-max_health int maximum health
-message char * message when entity activated (set by level editor)
-mins, maxs vec3_t position of min and max points of entity
- relative to its origin
-model char * filename of entitie's model
-monsterinfo monsterinfo_t info about the monster (see below)
-move_angles vec3_t the angle that the gun turret is facing
-move_origin vec3_t the origin of the gun turret
-movedir vec3_t direction currently moving in
-moveinfo moveinfo_t used by the ships flying overhead
-movetarget edict_t * entity to wark towards when not got anything better to do
- (such as killing the player)
-movetype int how the entity moves :
- MOVETYPE_NONE -never moves
- MOVETYPE_NOCLIP -ignores walls, entities, etc.
- MOVETYPE_PUSH -ignores walls, pushes entities
- MOVETYPE_STOP -ignores walls, stops on entities
- MOVETYPE_WALK -affected by gravity
- MOVETYPE_STEP -gravity, special edge handling,
- used by monsters
- MOVETYPE_FLY -no gravity, used by flying monsters
- MOVETYPE_TOSS -gravity, hits ground and stops
- MOVETYPE_FLYMISSILE -weapons, extra clip size when
- hitting monsters
- MOVETYPE_BOUNCE -bounces (eg grenade)
-mynoise,mynoise2 edict_t * spawned when player makes a noise, monsters can home in on
- them
-nextthink float time at which entity should call function 'ent->think'
-noise_index int index of sound to play when entity is triggered
-noise_index2 int not used anywhere
-num_clusters int ?
-oldenemy edict_t * player they were attacking before distracted (by anither
- monster hitting them)
-pain void function to call when hurt (optional)
-pain_debounce_time float prevent pain sounds/anims playing to often
-pathtarget char * name of entity to move towards
-pos1 vec3_t top position of lift
-pos2 vec3_t bottom position of lift
-powerarmor_time float time to stop showing translucent shield effects
-prethink void function to call before each frame (optional)
-owner edict_t * usually the entity that spawned this entity (eg
- bullet is 'owned' by the monster that fired it)
-radius_dmg int amount of radius damage done by entity
-random float used to add a bit of time variation to func_timer
-s entity_state_t has several subtypes (see below)
-show_hostile qboolean any monsters seeing this one will inherit its enemy
-size vec3_t size of entity (vector from mins to maxs)
-solid solid_t solidity of entity :
- SOLID_NOT -no interaction with other objects
- SOLID_TOUCH -touch inside after moving (used for
- triggers)
- SOLID_BBOX -touch on side (monsters, etc)
- SOLID_BDP -bsp clip, touch on edge (for solid
- walls, blocks, etc)
-sounds int type of sounds to play - used by doors, lifts, etc
-spawnflags int set by level editor, some values are :SPAWNFLAG_NOT_EASY,
- SPAWNFLAG_NOT_MEDIUM, SPAWNFLAG_NOT_HARD,
- SPAWNFLAG_NOT_DEATHMATCH, SPAWNFLAG_NOT_COOP
- There are other possible settings, which I have not yet
- looked at in detail.
-speed float speed of misc entities, including moving buttons, the
- gun turret and the fly-by ships
-style int type of entities (eg type of health box) also used as
- areaportal number (something to do with separating areas)
-svflags int either : SVF_NOCLIENT - don't send to clients
- SVF_DEADMONSTER - a dead monster
- SVF_MONSTER - same, a bit earlier
-takedamgage int can the entity be damaged? :
- DAMAGE_NO -will not take damage
- DAMAGE_YES -will take damage
- DAMAGE_AIM -will take damage + weapons 'auto-aim' at it
-target char * name of entity to trigger or move towards
-target_ent editc_t * entity that platform/lift is moving towards
-targetname char * name pointed to by target
-team char * name of team which entity is part of
-teamchain edict_t * the next entity in the team
-teammaster edict_t * the master entity in the team
-teleport_time float time when monster teleported into level
-think void sets the function that should be called at time nextthink
-timestamp float used by various functions to mark the spawn time of an
- entity or the start of a change (eg a light ramp)
-touch void function to call when it touches another entity/the world
- (optional)
-touch_debounce_time float prevent touch function from being called again too quickly
-use void function to call when used (optional)
-viewheight int height above origin where eyes are found
-velocity vec3_t current velocity. I think this is used in the external
- c code to change the entity's position. Can anyone confirm
- whether this is internal or external?
-volume float volume when playing above sound (set at level edit)
-wait float time to wait before platform moves to the next point on its
- path
-waterlevel int height of liquid :
- 0 - not in liquid
- 1 - feet in liquid
- 2 - on surface of liquid
- 3 - surrounded by liquid
-watertype int type of water the entity is in (see the CONTENTS_* list
- at bottom of document)
-yaw_speed float speed to turn towards ideal yaw
-
-
-gitem_t
-
-referenced by 'entity_name->item.attribute'
-
-Name Type Notes
-
-ammo char * type of ammo to use
-classname char * name when spawning it
-count_width int number of digits to display by icon
-drop void function called when entity dropped
-flags int type of pickup :
- IT_WEAPON, IT_AMMO, IT_ARMOR
-icon char * filename of icon
-info void * ? unused
-pickup qboolean function called when entity picked up
-pickup_name char * displayed onscreen when item picked up
-pickup_sound char * filename of sound to play when picked up
-precaches char * string containing all models, sounds etc. needed by this
- item
-quantity int ammo gained by item/ammo used per shot by item
-tag int ? unused
-use void function called when entity used
-view_model char * filename of model when being held
-weaponthink void unused function
-world_model char * filename of model when item is sitting on level
-world_model_flags int copied to 'ent->s.effects' (see s.effects for values)
-
-
-monsterinfo_t
-
-referenced by 'entity_name->monsterinfo.attribute'
-
-Name Type Notes
-
-aiflags int controls how the monster will behave :
- AI_STAND_GROUND -don't move
- AI_TEMP_STAND_GROUND -stand ground for a short time
- (don't get too close to enemy?)
- AI_SOUND_TARGET -look for source of a sound
- AI_LOST_SIGHT -just lost sight of player
- AI_PURSUIT_LAST_SEEN -
- AI_PURSUE_NEXT -able to get to last sighting point
- this frame
- AI_PURSUE_TEMP -continue to persue for a bit
- AI_HOLD_FRAME -entity will hold the same frame
- (eg machine gun firing)
- AI_GOOD_GUY -don't attack you (prisoners)
- AI_BRUTAL -keep attacking until enemy's
- health < -80 (usualy stop at 0)
- AI_NOSTEP -used by exploding box
- AI_DUKED -monster's (pathetic) attempts to
- evade your shots
- AI_COMBAT_POINT -ignores everything else until it
- reaches it's destination
- AI_MEDIC -healing something (stop when the
- 'enemy's health > 0 )
- AI_RESURRECTING -it's ALIVE!!! (almost) show
- resurection effects
-attack_finished float time when attack will be finished (prevents further attacks
- before monster is ready)
-attack_state int attack method the monster is using :
- AS_STRAIGHT -moving forwards to firing position
- AS_SLIDING -moving sideways to firing position
- AS_MELEE -close range attack
- AS_MISSILE -long range attack
-currentmove mmove_t * current set of frames cycling between
-idle_time float time until which the idle animation should be played
-last_sighting vec3_t last point where the player was seen
-lefty int if and attack_state is AS_SLIDING, the monster will go left
- otherwise it'll go right. this is swapped each time
-linkcount int changed by gi.linkentity?
-nextframe int next frame to display
-pausetime float time to stop at a particular path_corner
-power_armor_power int energy the armor has left
-power_armor_type int type of power armor:
- POWER_ARMOR_NONE, POWER_ARMOR_SCREEN, POWER_ARMOR_SHIELD 2
-saved_goal vec3_t if the monster can't get to where it wants to this frame,
- that position is saved here
-scale float adjusts the running speed of the monster
-search_time float time to keep looking for player
-trail_time float timestamp of last section of player's trail found
-
-The following functions are called when certain conditions are met:
-
-attack void ranged attack (optional)
-checkattack qboolean function called to see if the monster will attack this frame
-dodge void !!INCOMING!! so just duck 'cos they wouldn't aim for your
- feet, would they? (optional)
-idle void animation to 'spice up' the standing around (optional)
-melee void close-up attack (optional)
-run void has an enemy, getting ready to attack
-search void searching for player animation (optional)
-sight void just spotted someone (optional)
-stand void function to call when just standing around
-walk void moving towards movetarget
-
-entity_state_t
-
-attributes here are referenced by 'entity_name->s.attribute'
-
-Name Type Notes
-
-angles vec3_t angles of the entity :
- ...angles[0] = pitch
- ...angles[1] = yaw
- ...angles[2] = roll (not really used)
-frame int current frame
-effects int special effects to apply to entity can be one or more of:
- EF_ROTATE -rotates (bonus items)
- EF_GIB -leave a blood trail
- EF_BLASTER -coloured light + trail
- EF_ROCKET -coloured light + trail
- EF_GRENADE -smoke trail?
- EF_HYPERBLASTER -light + trail
- EF_BFG -light + particles?
- EF_COLOR_SHELL -coloured glow around the entity
- EF_POWERSCREEN -green screen
- EF_ANIM01 -automatically cycle between frames 0 and 1 at 2 hz
- EF_ANIM23 -automatically cycle between frames 2 and 3 at 2 hz
- EF_ANIM_ALL -automatically cycle through all frames at 2hz
- EF_ANIM_ALLFAST -automatically cycle through all frames at 10hz
- EF_FLIES -flies effect
- EF_QUAD -quad damage 'glow'
- EF_PENT -invincibility 'glow'
-event int effects that last one frame :
- EV_NONE -no effect
- EV_ITEM_RESPAWN -item respawning
- EV_FOOTSTEP -footstep noise
- EV_FALLSHORT -noise from small fall
- EV_MALE_FALL -noise from male falling
- EV_MALE_FALLFAR -noise from male falling a long way
- EV_FEMALE_FALL -noise from female falling
- EV_FEMALE_FALLFAR -noise from female falling a long way
- EV_PLAYER_TELEPORT-teleportation effects
-modelindex int index of precached model
-modelindex2 int for when one modelindex just isn't enough ;). Used with
- the final 2-stage boss (oops, sorry if that's a spolier)
- and to show separate player weapons
-modelindex3,4 int not used
-number int entity index number
-old_origin vec3_t last position of entity (used in a few odd places)
-origin vec3_t origin of the entity
-renderfx int various drawing effects :
- RF_MINLIGHT -can always see the entity
- RF_VIEWERMODEL -don't let the player see this (himself)
- RF_WEAPONMODEL -only let the current player see this
- RF_FULLBRIGHT -entity always fully lit
- RF_DEPTHHACK -for view weapon Z crunching (?!)
- RF_TRANSLUCENT -entity is see through
- RF_FRAMELERP -? used by monsters and bodies
- RF_BEAM -laser beam
- RF_CUSTOMSKIN -skin is an index in image_precache
- RF_GLOW -pulse lighting for bonus items
- RF_SHELL_RED -red glow, when monsters are resurrecting
- RF_SHELL_GREEN -green glow, from power shield
- RF_SHELL_BLUE -blue glow, not currently used
-skinnum int current skin number
-solid int set by gi.linkentity, for client-side prediction
-sound int to gaurentee shut-off of looping sounds
-
-
-
-
-CONTENTS_SOLID solid wall (not windows)
-CONTENTS_WINDOW windows
-CONTENTS_AUX ?
-CONTENTS_LAVA err.. lava
-CONTENTS_SLIME slime
-CONTENTS_WATER water
-CONTENTS_MIST !!Unused!!
-LAST_VISIBLE_CONTENTS ?
-CONTENTS_AREAPORTAL portals to conserve memory used in map designing, also dont allow sounds to pass //kami0
-CONTENTS_PLAYERCLIP brush which player may not pass through //kami0
-CONTENTS_MONSTERCLIP brush where monsters may not pass through //kami0
-CONTENTS_CURRENT_0 flowing current moving at angle 0 //kami0
-CONTENTS_CURRENT_90 flowing current moving at angle 90 //kami0
-CONTENTS_CURRENT_180 flowing current moving at angle 180 //kami0
-CONTENTS_CURRENT_270 flowing current moving at angle 270 //kami0
-CONTENTS_CURRENT_UP flowing current moving up //kami0
-CONTENTS_CURRENT_DOWN flowing current moving down //kami0
-CONTENTS_ORIGIN used for rotation, invisible //kami0
-CONTENTS_MONSTER non-solid monster?
-CONTENTS_DEADMONSTER dead monster
-CONTENTS_DETAIL brush that is not passed to vis - not in final BSP ?
-CONTENTS_TRANSLUCENT see through
-CONTENTS_LADDER ladder
-
-MASK_ALL -stop on anything
-MASK_SOLID -walls/windows
-MASK_PLAYERSOLID -anything you'd expect a player to stop on
-MASK_DEADSOLID -same as above, can go through monsters
-MASK_MONSTERSOLID -anything you'd expect a monster to stop on
-MASK_WATER -any liquid
-MASK_OPAQUE -walls and liquid except water (which is see-through)
-MASK_SHOT -walls, monsters and dead monsters
-MASK_CURRENT -flowing brush
-
-Written by Davo ([email protected])
-(parts marked //kami0 supplied by Michael 'kami0' DiGiovanni ([email protected]))
-
-If there are any corrections, bugs etc, please e-mail me.
-
-Please also note that this has been the result of searching through the c files supplied by
-iD, and I don't have reference to any official documents or anything, so don't assume I know
-what I'm talking about ;). \ No newline at end of file
diff --git a/test/AdapterRegister.java b/test/AdapterRegister.java
deleted file mode 100644
index 5e56c0b..0000000
--- a/test/AdapterRegister.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 08.01.2004 by RST.
-// $Id: AdapterRegister.java,v 1.1 2004-07-09 06:50:51 hzi Exp $
-// $Log: AdapterRegister.java,v $
-// Revision 1.1 2004-07-09 06:50:51 hzi
-// import of Jake2
-//
-// Revision 1.1 2004/02/25 21:30:15 hoz
-// *** empty log message ***
-//
-// Revision 1.2 2004/02/02 22:19:17 rst
-// cosmetic
-//
-// Revision 1.1 2004/02/02 22:16:05 rst
-// cosmetic
-//
-// Revision 1.2 2004/01/09 18:30:57 rst
-// Superadapter replaces function pointers in save games.
-//
-// Revision 1.1 2004/01/08 23:56:43 rst
-// some preisfrage
-//
-
-// import jake2.*;
-// import jake2.client.*;
-// import jake2.game.*;
-// import jake2.qcommon.*;
-// import jake2.render.*;
-// import jake2.server.*;
-
-public class AdapterRegister {
-
- // concept for adapter indexing for function pointers
-
-
- // the counter
- static int id =0;
-
- static class t0
- {
- // the identificator
- public int myid = id++;
-
- public String test()
- {
- return ("t0, id = " + myid);
- }
-
- };
- // any stupid adapter
- static class t1 extends t0
- {
- public String test()
- {
- return ("t1, id = " + myid);
- }
- };
- // second adapter
- static class t2 extends t0
- {
- public String test(int x)
- {
- return ("t2, id = " + myid);
- }
- }
-
-
- // an auto test client
- public static void main(String[] args) {
-
- // program starts
- System.out.println("hello world.");
-
- t1 t1 = new t1();
- t2 t2 = new t2();
- t2 t3 = new t2();
- System.out.println(t1.test());
- System.out.println(t2.test());
- System.out.println(t2.test(5));
- System.out.println(t3.test(5));
-
- System.out.println("good bye world.");
- // program ends
- }
-}
diff --git a/test/ConvertDefines.java b/test/ConvertDefines.java
deleted file mode 100644
index 9a411a3..0000000
--- a/test/ConvertDefines.java
+++ /dev/null
@@ -1,138 +0,0 @@
-import java.io.*;
-import java.util.StringTokenizer;
-
-
-/** This class converts the #define statements into java
- * public static final int statements.
- *
- * Additionally it converts some mframe_t statements, when the filename
- * starts with "jake2/game/M_" .
- */
-
-public class ConvertDefines
-{
- public static String convertDefine(String in)
- {
- StringBuffer out= new StringBuffer();
-
- StringTokenizer tk= new StringTokenizer(in);
- while (tk.hasMoreElements())
- {
- String token= tk.nextToken();
-
- // finds the define
- if (token.equals("#define"))
- {
- out.append(" public final static int ");
- out.append(tk.nextToken());
- out.append("= ");
- out.append(tk.nextToken());
- out.append(";\t");
-
- // append rest and out.
- while (tk.hasMoreElements())
- {
- out.append(tk.nextToken());
- out.append(" ");
- }
- }
- else
- {
- out.append(token);
- out.append(" ");
- }
- }
- return out.toString();
- }
-
- /********************************************/
- public static void main(String args[])
- {
- try
- {
-
- System.out.println("\n".trim().length());
- String line;
- String filename;
- boolean m_doc = true;
-
- if (args.length == 0)
- {
- filename= "jake2/Defines.java";
- }
- else
- filename= args[0];
-
- if (filename.startsWith("jake2/game/M_"))
- m_doc = true;
- else m_doc = false;
-
- FileWriter fw= new FileWriter(filename + ".new");
- FileReader fr= new FileReader(filename);
- BufferedReader br= new BufferedReader(fr);
-
- while (br.ready())
- {
- line= br.readLine();
- if (line.indexOf("#define") != -1)
- fw.write(convertDefine(line) + "\n");
-
-
- else if (m_doc && line.trim().startsWith("mframe_t ") && line.indexOf("new") == -1)
- {
- fw.write(" static " + line + " new mframe_t[] \n");
- while (br.ready())
- {
- line= br.readLine();
- // opening brace
-
- if (line.indexOf("{")!=-1)
- fw.write(line + "\n");
- // opening brace
- else if (line.indexOf("}")!=-1)
- {
- fw.write(line + "\n");
- break;
-
- }
- else if (line.trim().length()==0)
- fw.write("\n");
- else
- {
- String comma ="";
- String line1 = line;
-
- if (line.endsWith(","))
- {
- line1=line.substring(0,line1.length()-1);
- comma = ",";
- }
- fw.write("\tnew mframe_t (" + line1 + ")" + comma + "\n");
- }
- }
- }
- else if (m_doc && line.trim().startsWith("mmove_t"))
- {
- int pos1 = line.indexOf("{");
- int pos2 = line.indexOf("}");
- String seg1 = line.substring(0,pos1);
- String seg2 = line.substring(pos1+1, pos2);
- String seg3 = line.substring(pos2+1, line.length());
- fw.write("static " + seg1 + " new mmove_t (" + seg2 + ")" + seg3 + "\n\n");
- //fw.write(line);
- }
- else
- fw.write(line + "\n");
- }
- fr.close();
- fw.close();
-
- //System.out.println(convertDefine("#define IT_WEAPON 1 // use makes active weapon"));
- //System.out.println(convertDefine("#define IT_AMMO 2"));
- }
- catch (Exception e)
- {
- System.err.println("Exception:" + e);
- }
- }
-}
diff --git a/test/Unpack.java b/test/Unpack.java
deleted file mode 100644
index dc302ea..0000000
--- a/test/Unpack.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Unpack -- a completely non-object oriented utility...
- *
- */
-
-import java.io.*;
-
-class Unpack
-{
- static final int IDPAKHEADER= (('K' << 24) + ('C' << 16) + ('A' << 8) + 'P');
-
- static int intSwap(int i)
- {
- int a, b, c, d;
-
- a= i & 255;
- b= (i >> 8) & 255;
- c= (i >> 16) & 255;
- d= (i >> 24) & 255;
-
- return (a << 24) + (b << 16) + (c << 8) + d;
- }
-
- static boolean patternMatch(String pattern, String s)
- {
- int index;
- int remaining;
-
- if (pattern.equals(s))
- {
- return true;
- }
-
- // fairly lame single wildcard matching
- index= pattern.indexOf('*');
- if (index == -1)
- {
- return false;
- }
- if (!pattern.regionMatches(0, s, 0, index))
- {
- return false;
- }
-
- index += 1; // skip the *
- remaining= pattern.length() - index;
- if (s.length() < remaining)
- {
- return false;
- }
-
- if (!pattern.regionMatches(index, s, s.length() - remaining, remaining))
- {
- return false;
- }
-
- return true;
- }
-
- static void usage()
- {
- System.out.println("Usage: unpack <packfile> <match> <basedir>");
- System.out.println(" or: unpack -list <packfile>");
- System.out.println("<match> may contain a single * wildcard");
- System.exit(1);
- }
-
- public static void main(String[] args)
- {
- int ident;
- int dirofs;
- int dirlen;
- int i;
- int numLumps;
- byte[] name= new byte[56];
- String nameString;
- int filepos;
- int filelen;
- RandomAccessFile readLump;
- DataInputStream directory;
- String pakName;
- String pattern;
-
- if (args.length == 2)
- {
- if (!args[0].equals("-list"))
- {
- usage();
- }
- pakName= args[1];
- pattern= null;
- }
- else if (args.length == 3)
- {
- pakName= args[0];
- pattern= args[1];
- }
- else
- {
- pakName= null;
- pattern= null;
- usage();
- }
-
- try
- {
- // one stream to read the directory
- directory= new DataInputStream(new FileInputStream(pakName));
-
- // another to read lumps
- readLump= new RandomAccessFile(pakName, "r");
-
- // read the header
- ident= intSwap(directory.readInt());
- dirofs= intSwap(directory.readInt());
- dirlen= intSwap(directory.readInt());
-
- if (ident != IDPAKHEADER)
- {
- System.out.println(pakName + " is not a pakfile.");
- System.exit(1);
- }
-
- // read the directory
- directory.skipBytes(dirofs - 12);
- numLumps= dirlen / 64;
-
- System.out.println(numLumps + " lumps in " + pakName);
-
- for (i= 0; i < numLumps; i++)
- {
- directory.readFully(name);
- filepos= intSwap(directory.readInt());
- filelen= intSwap(directory.readInt());
-
- nameString= new String(name);
- // chop to the first 0 byte
- nameString= nameString.substring(0, nameString.indexOf(0));
-
- if (pattern == null)
- {
- // listing mode
- System.out.println(nameString + " : " + filelen + "bytes");
- }
- else if (patternMatch(pattern, nameString))
- {
- File writeFile;
- DataOutputStream writeLump;
- byte[] buffer= new byte[filelen];
- StringBuffer fixedString;
- String finalName;
- int index;
-
- System.out.println("Unpaking " + nameString + " " + filelen + " bytes");
-
- // load the lump
- readLump.seek(filepos);
- readLump.readFully(buffer);
-
- // quake uses forward slashes, but java requires
- // they only by the host's seperator, which
- // varies from win to unix
- fixedString= new StringBuffer(args[2] + File.separator + nameString);
- for (index= 0; index < fixedString.length(); index++)
- {
- if (fixedString.charAt(index) == '/')
- {
- fixedString.setCharAt(index, File.separatorChar);
- }
- }
- finalName= fixedString.toString();
-
- index= finalName.lastIndexOf(File.separatorChar);
- if (index != -1)
- {
- String finalPath;
- File writePath;
-
- finalPath= finalName.substring(0, index);
- writePath= new File(finalPath);
- writePath.mkdirs();
- }
-
- writeFile= new File(finalName);
- writeLump= new DataOutputStream(new FileOutputStream(writeFile));
- writeLump.write(buffer);
- writeLump.close();
-
- }
- }
-
- readLump.close();
- directory.close();
-
- }
- catch (IOException e)
- {
- System.out.println(e.toString());
- }
- }
-
-}
diff --git a/test/jake2/client/CircleListener.java b/test/jake2/client/CircleListener.java
deleted file mode 100644
index 35762e8..0000000
--- a/test/jake2/client/CircleListener.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 07.01.2000 by RST.
-// $Id: CircleListener.java,v 1.1 2004-07-07 19:59:56 hzi Exp $
-
-package jake2.client;
-
-import java.awt.*;
-import java.awt.event.*;
-import javax.swing.*;
-import java.awt.Robot;
-
-
-
-// import jake2.*;
-// import jake2.client.*;
-// import jake2.game.*;
-// import jake2.qcommon.*;
-// import jake2.render.*;
-// import jake2.server.*;
-
-class CircleListener implements ActionListener {
- Robot robot;
- public CircleListener(Robot robot) {
- this.robot = robot;
- }
-
- public void actionPerformed(ActionEvent evt) {
- int originx = (int)GhostMouse.size.getWidth()/2;
- int originy = (int)GhostMouse.size.getHeight()/2;
- double pi = 3.1457;
-
- for(double theta = 0; theta < 4*pi; theta=theta+0.1) {
- double radius = theta * 20;
- double x = Math.cos(theta) * radius + originx;
- double y = Math.sin(theta) * radius + originy;
- robot.mouseMove((int)x,(int)y);
- try{Thread.sleep(25);} catch (Exception ex) { }
- }
- }
-
-}
-
diff --git a/test/jake2/client/GhostMouse.java b/test/jake2/client/GhostMouse.java
deleted file mode 100644
index f1da88d..0000000
--- a/test/jake2/client/GhostMouse.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 1997-2001 Id Software, Inc.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.
- *
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-// Created on 07.01.2000 by RST.
-// $Id: GhostMouse.java,v 1.3 2004-09-15 22:13:36 cawe Exp $
-package jake2.client;
-
-import java.awt.Dimension;
-import java.awt.Robot;
-import java.awt.Toolkit;
-
-import javax.swing.JButton;
-import javax.swing.JFrame;
-
-public class GhostMouse {
- public static Dimension size;
-
- public static void main(String[] args) throws Exception {
- Robot robot = new Robot();
- size = Toolkit.getDefaultToolkit().getScreenSize();
-
- JFrame frame = new JFrame("Ghost Mouse (tm)!");
- JButton button = new JButton("Gho Ghost");
- frame.getContentPane().add(button);
- button.addActionListener(new CircleListener(robot));
-
- frame.pack();
- frame.setLocation((int) (size.getWidth() - frame.getWidth()) / 2,
- (int) (size.getHeight() - frame.getHeight()) / 2);
- frame.setVisible(true);
- }
-} \ No newline at end of file
diff --git a/test/jake2/qcommon/TestCMD.java b/test/jake2/qcommon/TestCMD.java
deleted file mode 100644
index 3316fd7..0000000
--- a/test/jake2/qcommon/TestCMD.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 29.12.2003 by RST.
-// $Id: TestCMD.java,v 1.2 2004-07-09 06:50:51 hzi Exp $
-
-package jake2.qcommon;
-
-import java.io.*;
-
-import jake2.*;
-import jake2.client.*;
-import jake2.game.*;
-import jake2.qcommon.*;
-import jake2.render.*;
-import jake2.server.*;
-
-public class TestCMD {
-
- public static void main(String args[]) {
- try {
- Cmd.Init();
- Cmd.RemoveCommand("exec");
-
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- System.out.println("Give some commands:");
-
- while (true) {
- System.out.println("#");
- String line = br.readLine();
- Cmd.ExecuteString(line);
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/test/jake2/qcommon/TestCOM.java b/test/jake2/qcommon/TestCOM.java
deleted file mode 100644
index 6432fbe..0000000
--- a/test/jake2/qcommon/TestCOM.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 29.12.2003 by RST.
-// $Id: TestCOM.java,v 1.1 2004-07-07 19:59:56 hzi Exp $
-
-package jake2.qcommon;
-
-import jake2.*;
-import jake2.client.*;
-import jake2.game.*;
-import jake2.qcommon.*;
-import jake2.render.*;
-import jake2.server.*;
-
-public class TestCOM {
-
- public static void main(String args[]) {
- String test = "testrene = \"ein mal eins\"; a=3 ";
- Com.ParseHelp ph = new Com.ParseHelp(test);
-
- while (!ph.isEof())
- System.out.println("[" + Com.Parse(ph) + "]");
-
- System.out.println("OK!");
-
- test = " testrene = \"ein mal eins\"; a=3";
-
- ph = new Com.ParseHelp(test);
-
- while (!ph.isEof())
- System.out.println("[" + Com.Parse(ph) + "]");
-
- System.out.println("OK!");
- }
-}
diff --git a/test/jake2/qcommon/TestCvar.java b/test/jake2/qcommon/TestCvar.java
deleted file mode 100644
index 49826e8..0000000
--- a/test/jake2/qcommon/TestCvar.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 29.12.2003 by RST.
-// $Id: TestCvar.java,v 1.1 2004-07-07 19:59:56 hzi Exp $
-
-package jake2.qcommon;
-
-
-// import jake2.*;
-// import jake2.client.*;
-// import jake2.game.*;
-// import jake2.qcommon.*;
-// import jake2.render.*;
-// import jake2.server.*;
-
-public class TestCvar {
-
- public static void main(String[] args) {
- Cvar.Set("rene", "is cool.");
-
- Com.Printf("rene:" + Cvar.FindVar("rene").string);
- }
-}
diff --git a/test/jake2/qcommon/TestINFO.java b/test/jake2/qcommon/TestINFO.java
deleted file mode 100644
index 6a8483a..0000000
--- a/test/jake2/qcommon/TestINFO.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 29.12.2003 by RST.
-// $Id: TestINFO.java,v 1.2 2004-09-22 19:22:10 salomo Exp $
-
-package jake2.qcommon;
-
-import jake2.*;
-import jake2.client.*;
-import jake2.game.*;
-import jake2.render.*;
-import jake2.server.*;
-
-public class TestINFO {
-
- public static void main(String args[]) {
- String test = "\\key1\\value 1\\key 2 \\value2\\key3\\ v a l u e 3\\key4\\val ue 4";
- Info.Print(test);
- test = Info.Info_RemoveKey1(test, "key1");
- Info.Print(test);
- }
-}
diff --git a/test/jake2/qcommon/TestLoadGame.java b/test/jake2/qcommon/TestLoadGame.java
deleted file mode 100644
index 4268ee9..0000000
--- a/test/jake2/qcommon/TestLoadGame.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 1997-2001 Id Software, Inc.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option) any later
- * version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE.
- *
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- */
-
-// Created on 02.01.2004 by RST.
-// $Id: TestLoadGame.java,v 1.2 2004-09-22 19:22:10 salomo Exp $
-package jake2.qcommon;
-
-import jake2.game.GameSave;
-
-public class TestLoadGame {
- public static void main(String args[]) {
-
- Qcommon.Init(args);
-
- System.out.println("hello!");
- GameSave.InitGame();
- GameSave.ReadGame("test/data/savegames/game.ssv");
- }
-} \ No newline at end of file
diff --git a/test/jake2/qcommon/TestLoadMap.java b/test/jake2/qcommon/TestLoadMap.java
deleted file mode 100644
index bc3efca..0000000
--- a/test/jake2/qcommon/TestLoadMap.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 02.01.2004 by RST.
-// $Id: TestLoadMap.java,v 1.2 2004-07-09 06:50:51 hzi Exp $
-
-package jake2.qcommon;
-
-public class TestLoadMap {
- public static void main(String[] args) {
- Com.DPrintf("hello!\n");
-
- FS.InitFilesystem();
-
- CM.CM_LoadMap("maps/base1.bsp", true, new int[]{0});
- }
-}
diff --git a/test/jake2/qcommon/TestMD4.java b/test/jake2/qcommon/TestMD4.java
deleted file mode 100644
index 5a0d84a..0000000
--- a/test/jake2/qcommon/TestMD4.java
+++ /dev/null
@@ -1,1174 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 02.02.2004 by RST.
-// $Id: TestMD4.java,v 1.2 2004-07-09 06:50:51 hzi Exp $
-
-package jake2.qcommon;
-
-import jake2.*;
-import jake2.client.*;
-import jake2.game.*;
-import jake2.render.*;
-import jake2.server.*;
-import jake2.util.Lib;
-
-//
-//
-//
-//
-//Network Working Group R. Rivest
-//Request for Comments: 1320 MIT Laboratory for Computer Science
-//Obsoletes: RFC 1186 and RSA Data Security, Inc.
-// April 1992
-//
-//
-// The MD4 Message-Digest Algorithm
-//
-//Status of thie Memo
-//
-// This memo provides information for the Internet community. It does
-// not specify an Internet standard. Distribution of this memo is
-// unlimited.
-//
-//Acknowlegements
-//
-// We would like to thank Don Coppersmith, Burt Kaliski, Ralph Merkle,
-// and Noam Nisan for numerous helpful comments and suggestions.
-//
-//Table of Contents
-//
-// 1. Executive Summary 1
-// 2. Terminology and Notation 2
-// 3. MD4 Algorithm Description 2
-// 4. Summary 6
-// References 6
-// APPENDIX A - Reference Implementation 6
-// Security Considerations 20
-// Author's Address 20
-//
-//1. Executive Summary
-//
-// This document describes the MD4 message-digest algorithm [1]. The
-// algorithm takes as input a message of arbitrary length and produces
-// as output a 128-bit "fingerprint" or "message digest" of the input.
-// It is conjectured that it is computationally infeasible to produce
-// two messages having the same message digest, or to produce any
-// message having a given prespecified target message digest. The MD4
-// algorithm is intended for digital signature applications, where a
-// large file must be "compressed" in a secure manner before being
-// encrypted with a private (secret) key under a public-key cryptosystem
-// such as RSA.
-//
-// The MD4 algorithm is designed to be quite fast on 32-bit machines. In
-// addition, the MD4 algorithm does not require any large substitution
-// tables; the algorithm can be coded quite compactly.
-//
-//
-//
-//
-//
-//Rivest [Page 1]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// The MD4 algorithm is being placed in the public domain for review and
-// possible adoption as a standard.
-//
-// This document replaces the October 1990 RFC 1186 [2]. The main
-// difference is that the reference implementation of MD4 in the
-// appendix is more portable.
-//
-// For OSI-based applications, MD4's object identifier is
-//
-// md4 OBJECT IDENTIFIER ::=
-// {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 4}
-//
-// In the X.509 type AlgorithmIdentifier [3], the parameters for MD4
-// should have type NULL.
-//
-//2. Terminology and Notation
-//
-// In this document a "word" is a 32-bit quantity and a "byte" is an
-// eight-bit quantity. A sequence of bits can be interpreted in a
-// natural manner as a sequence of bytes, where each consecutive group
-// of eight bits is interpreted as a byte with the high-order (most
-// significant) bit of each byte listed first. Similarly, a sequence of
-// bytes can be interpreted as a sequence of 32-bit words, where each
-// consecutive group of four bytes is interpreted as a word with the
-// low-order (least significant) byte given first.
-//
-// Let x_i denote "x sub i". If the subscript is an expression, we
-// surround it in braces, as in x_{i+1}. Similarly, we use ^ for
-// superscripts (exponentiation), so that x^i denotes x to the i-th
-// power.
-//
-// Let the symbol "+" denote addition of words (i.e., modulo-2^32
-// addition). Let X <<< s denote the 32-bit value obtained by circularly
-// shifting (rotating) X left by s bit positions. Let not(X) denote the
-// bit-wise complement of X, and let X v Y denote the bit-wise OR of X
-// and Y. Let X xor Y denote the bit-wise XOR of X and Y, and let XY
-// denote the bit-wise AND of X and Y.
-//
-//3. MD4 Algorithm Description
-//
-// We begin by supposing that we have a b-bit message as input, and that
-// we wish to find its message digest. Here b is an arbitrary
-// nonnegative integer; b may be zero, it need not be a multiple of
-// eight, and it may be arbitrarily large. We imagine the bits of the
-// message written down as follows:
-//
-// m_0 m_1 ... m_{b-1}
-//
-//
-//
-//
-//Rivest [Page 2]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// The following five steps are performed to compute the message digest
-// of the message.
-//
-//3.1 Step 1. Append Padding Bits
-//
-// The message is "padded" (extended) so that its length (in bits) is
-// congruent to 448, modulo 512. That is, the message is extended so
-// that it is just 64 bits shy of being a multiple of 512 bits long.
-// Padding is always performed, even if the length of the message is
-// already congruent to 448, modulo 512.
-//
-// Padding is performed as follows: a single "1" bit is appended to the
-// message, and then "0" bits are appended so that the length in bits of
-// the padded message becomes congruent to 448, modulo 512. In all, at
-// least one bit and at most 512 bits are appended.
-//
-//3.2 Step 2. Append Length
-//
-// A 64-bit representation of b (the length of the message before the
-// padding bits were added) is appended to the result of the previous
-// step. In the unlikely event that b is greater than 2^64, then only
-// the low-order 64 bits of b are used. (These bits are appended as two
-// 32-bit words and appended low-order word first in accordance with the
-// previous conventions.)
-//
-// At this point the resulting message (after padding with bits and with
-// b) has a length that is an exact multiple of 512 bits. Equivalently,
-// this message has a length that is an exact multiple of 16 (32-bit)
-// words. Let M[0 ... N-1] denote the words of the resulting message,
-// where N is a multiple of 16.
-//
-//3.3 Step 3. Initialize MD Buffer
-//
-// A four-word buffer (A,B,C,D) is used to compute the message digest.
-// Here each of A, B, C, D is a 32-bit register. These registers are
-// initialized to the following values in hexadecimal, low-order bytes
-// first):
-//
-// word A: 01 23 45 67
-// word B: 89 ab cd ef
-// word C: fe dc ba 98
-// word D: 76 54 32 10
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//Rivest [Page 3]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-//3.4 Step 4. Process Message in 16-Word Blocks
-//
-// We first define three auxiliary functions that each take as input
-// three 32-bit words and produce as output one 32-bit word.
-//
-// F(X,Y,Z) = XY v not(X) Z
-// G(X,Y,Z) = XY v XZ v YZ
-// H(X,Y,Z) = X xor Y xor Z
-//
-// In each bit position F acts as a conditional: if X then Y else Z.
-// The function F could have been defined using + instead of v since XY
-// and not(X)Z will never have "1" bits in the same bit position.) In
-// each bit position G acts as a majority function: if at least two of
-// X, Y, Z are on, then G has a "1" bit in that bit position, else G has
-// a "0" bit. It is interesting to note that if the bits of X, Y, and Z
-// are independent and unbiased, the each bit of f(X,Y,Z) will be
-// independent and unbiased, and similarly each bit of g(X,Y,Z) will be
-// independent and unbiased. The function H is the bit-wise XOR or
-// parity" function; it has properties similar to those of F and G.
-//
-// Do the following:
-//
-// Process each 16-word block. */
-// For i = 0 to N/16-1 do
-//
-// /* Copy block i into X. */
-// For j = 0 to 15 do
-// Set X[j] to M[i*16+j].
-// end /* of loop on j */
-//
-// /* Save A as AA, B as BB, C as CC, and D as DD. */
-// AA = A
-// BB = B
-// CC = C
-// DD = D
-//
-// /* Round 1. */
-// /* Let [abcd k s] denote the operation
-// a = (a + F(b,c,d) + X[k]) <<< s. */
-// /* Do the following 16 operations. */
-// [ABCD 0 3] [DABC 1 7] [CDAB 2 11] [BCDA 3 19]
-// [ABCD 4 3] [DABC 5 7] [CDAB 6 11] [BCDA 7 19]
-// [ABCD 8 3] [DABC 9 7] [CDAB 10 11] [BCDA 11 19]
-// [ABCD 12 3] [DABC 13 7] [CDAB 14 11] [BCDA 15 19]
-//
-// /* Round 2. */
-// /* Let [abcd k s] denote the operation
-// a = (a + G(b,c,d) + X[k] + 5A827999) <<< s. */
-//
-//
-//
-//Rivest [Page 4]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// /* Do the following 16 operations. */
-// [ABCD 0 3] [DABC 4 5] [CDAB 8 9] [BCDA 12 13]
-// [ABCD 1 3] [DABC 5 5] [CDAB 9 9] [BCDA 13 13]
-// [ABCD 2 3] [DABC 6 5] [CDAB 10 9] [BCDA 14 13]
-// [ABCD 3 3] [DABC 7 5] [CDAB 11 9] [BCDA 15 13]
-//
-// /* Round 3. */
-// /* Let [abcd k s] denote the operation
-// a = (a + H(b,c,d) + X[k] + 6ED9EBA1) <<< s. */
-// /* Do the following 16 operations. */
-// [ABCD 0 3] [DABC 8 9] [CDAB 4 11] [BCDA 12 15]
-// [ABCD 2 3] [DABC 10 9] [CDAB 6 11] [BCDA 14 15]
-// [ABCD 1 3] [DABC 9 9] [CDAB 5 11] [BCDA 13 15]
-// [ABCD 3 3] [DABC 11 9] [CDAB 7 11] [BCDA 15 15]
-//
-// /* Then perform the following additions. (That is, increment each
-// of the four registers by the value it had before this block
-// was started.) */
-// A = A + AA
-// B = B + BB
-// C = C + CC
-// D = D + DD
-//
-// end /* of loop on i */
-//
-// Note. The value 5A..99 is a hexadecimal 32-bit constant, written with
-// the high-order digit first. This constant represents the square root
-// of 2. The octal value of this constant is 013240474631.
-//
-// The value 6E..A1 is a hexadecimal 32-bit constant, written with the
-// high-order digit first. This constant represents the square root of
-// 3. The octal value of this constant is 015666365641.
-//
-// See Knuth, The Art of Programming, Volume 2 (Seminumerical
-// Algorithms), Second Edition (1981), Addison-Wesley. Table 2, page
-// 660.
-//
-//3.5 Step 5. Output
-//
-// The message digest produced as output is A, B, C, D. That is, we
-// begin with the low-order byte of A, and end with the high-order byte
-// of D.
-//
-// This completes the description of MD4. A reference implementation in
-// C is given in the appendix.
-//
-//
-//
-//
-//
-//
-//Rivest [Page 5]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-//4. Summary
-//
-// The MD4 message-digest algorithm is simple to implement, and provides
-// a "fingerprint" or message digest of a message of arbitrary length.
-// It is conjectured that the difficulty of coming up with two messages
-// having the same message digest is on the order of 2^64 operations,
-// and that the difficulty of coming up with any message having a given
-// message digest is on the order of 2^128 operations. The MD4 algorithm
-// has been carefully scrutinized for weaknesses. It is, however, a
-// relatively new algorithm and further security analysis is of course
-// justified, as is the case with any new proposal of this sort.
-//
-//References
-//
-// [1] Rivest, R., "The MD4 message digest algorithm", in A.J. Menezes
-// and S.A. Vanstone, editors, Advances in Cryptology - CRYPTO '90
-// Proceedings, pages 303-311, Springer-Verlag, 1991.
-//
-// [2] Rivest, R., "The MD4 Message Digest Algorithm", RFC 1186, MIT,
-// October 1990.
-//
-// [3] CCITT Recommendation X.509 (1988), "The Directory -
-// Authentication Framework".
-//
-// [4] Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321, MIT and
-// RSA Data Security, Inc, April 1992.
-//
-//APPENDIX A - Reference Implementation
-//
-// This appendix contains the following files:
-//
-// global.h -- global header file
-//
-// md4.h -- header file for MD4
-//
-// md4c.c -- source code for MD4
-//
-// mddriver.c -- test driver for MD2, MD4 and MD5
-//
-// The driver compiles for MD5 by default but can compile for MD2 or MD4
-// if the symbol MD is defined on the C compiler command line as 2 or 4.
-//
-// The implementation is portable and should work on many different
-// plaforms. However, it is not difficult to optimize the implementation
-// on particular platforms, an exercise left to the reader. For example,
-// on "little-endian" platforms where the lowest-addressed byte in a 32-
-// bit word is the least significant and there are no alignment
-// restrictions, the call to Decode in MD4Transform can be replaced with
-//
-//
-//
-//Rivest [Page 6]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// a typecast.
-//
-//A.1 global.h
-//
-///* GLOBAL.H - RSAREF types and constants
-// */
-//
-///* PROTOTYPES should be set to one if and only if the compiler supports
-// function argument prototyping.
-// The following makes PROTOTYPES default to 0 if it has not already
-// been defined with C compiler flags.
-// */
-//#ifndef PROTOTYPES
-//#define PROTOTYPES 0
-//#endif
-//
-///* POINTER defines a generic pointer type */
-//typedef unsigned char *POINTER;
-//
-///* UINT2 defines a two byte word */
-//typedef unsigned short int UINT2;
-//
-///* UINT4 defines a four byte word */
-//typedef unsigned long int UINT4;
-//
-///* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
-// If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
-// returns an empty list.
-// */
-//
-//#if PROTOTYPES
-//#define PROTO_LIST(list) list
-//#else
-//#define PROTO_LIST(list) ()
-//#endif
-//
-//A.2 md4.h
-//
-///* MD4.H - header file for MD4C.C
-// */
-//
-///* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-// rights reserved.
-//
-// License to copy and use this software is granted provided that it
-// is identified as the "RSA Data Security, Inc. MD4 Message-Digest
-// Algorithm" in all material mentioning or referencing this software
-// or this function.
-//
-//
-//
-//Rivest [Page 7]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// License is also granted to make and use derivative works provided
-// that such works are identified as "derived from the RSA Data
-// Security, Inc. MD4 Message-Digest Algorithm" in all material
-// mentioning or referencing the derived work.
-//
-// RSA Data Security, Inc. makes no representations concerning either
-// the merchantability of this software or the suitability of this
-// software for any particular purpose. It is provided "as is"
-// without express or implied warranty of any kind.
-//
-// These notices must be retained in any copies of any part of this
-// documentation and/or software.
-// */
-//
-///* MD4 context. */
-//typedef struct {
-// UINT4 state[4]; /* state (ABCD) */
-// UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
-// unsigned char buffer[64]; /* input buffer */
-//} MD4_CTX;
-//
-//void MD4Init PROTO_LIST ((MD4_CTX *));
-//void MD4Update PROTO_LIST
-// ((MD4_CTX *, unsigned char *, unsigned int));
-//void MD4Final PROTO_LIST ((unsigned char [16], MD4_CTX *));
-//
-//A.3 md4c.c
-//
-///* MD4C.C - RSA Data Security, Inc., MD4 message-digest algorithm
-// */
-//
-///* Copyright (C) 1990-2, RSA Data Security, Inc. All rights reserved.
-//
-// License to copy and use this software is granted provided that it
-// is identified as the "RSA Data Security, Inc. MD4 Message-Digest
-// Algorithm" in all material mentioning or referencing this software
-// or this function.
-//
-// License is also granted to make and use derivative works provided
-// that such works are identified as "derived from the RSA Data
-// Security, Inc. MD4 Message-Digest Algorithm" in all material
-// mentioning or referencing the derived work.
-//
-// RSA Data Security, Inc. makes no representations concerning either
-// the merchantability of this software or the suitability of this
-// software for any particular purpose. It is provided "as is"
-// without express or implied warranty of any kind.
-//
-//
-//
-//
-//Rivest [Page 8]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// These notices must be retained in any copies of any part of this
-// documentation and/or software.
-// */
-//
-//#include "global.h"
-//#include "md4.h"
-//
-///* Constants for MD4Transform routine.
-// */
-//#define S11 3
-//#define S12 7
-//#define S13 11
-//#define S14 19
-//#define S21 3
-//#define S22 5
-//#define S23 9
-//#define S24 13
-//#define S31 3
-//#define S32 9
-//#define S33 11
-//#define S34 15
-//
-//static void MD4Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
-//static void Encode PROTO_LIST
-// ((unsigned char *, UINT4 *, unsigned int));
-//static void Decode PROTO_LIST
-// ((UINT4 *, unsigned char *, unsigned int));
-//static void MD4_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
-//static void MD4_memset PROTO_LIST ((POINTER, int, unsigned int));
-//
-//static unsigned char PADDING[64] = {
-// 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-//};
-//
-///* F, G and H are basic MD4 functions.
-// */
-//#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-//#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
-//#define H(x, y, z) ((x) ^ (y) ^ (z))
-//
-///* ROTATE_LEFT rotates x left n bits.
-// */
-//#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-//
-///* FF, GG and HH are transformations for rounds 1, 2 and 3 */
-///* Rotation is separate from addition to prevent recomputation */
-//
-//
-//
-//Rivest [Page 9]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-//#define FF(a, b, c, d, x, s) { \
-// (a) += F ((b), (c), (d)) + (x); \
-// (a) = ROTATE_LEFT ((a), (s)); \
-// }
-//#define GG(a, b, c, d, x, s) { \
-// (a) += G ((b), (c), (d)) + (x) + (UINT4)0x5a827999; \
-// (a) = ROTATE_LEFT ((a), (s)); \
-// }
-//#define HH(a, b, c, d, x, s) { \
-// (a) += H ((b), (c), (d)) + (x) + (UINT4)0x6ed9eba1; \
-// (a) = ROTATE_LEFT ((a), (s)); \
-// }
-//
-///* MD4 initialization. Begins an MD4 operation, writing a new context.
-// */
-//void MD4Init (context)
-//MD4_CTX *context; /* context */
-//{
-// context->count[0] = context->count[1] = 0;
-//
-// /* Load magic initialization constants.
-// */
-// context->state[0] = 0x67452301;
-// context->state[1] = 0xefcdab89;
-// context->state[2] = 0x98badcfe;
-// context->state[3] = 0x10325476;
-//}
-//
-///* MD4 block update operation. Continues an MD4 message-digest
-// operation, processing another message block, and updating the
-// context.
-// */
-//void MD4Update (context, input, inputLen)
-//MD4_CTX *context; /* context */
-//unsigned char *input; /* input block */
-//unsigned int inputLen; /* length of input block */
-//{
-// unsigned int i, index, partLen;
-//
-// /* Compute number of bytes mod 64 */
-// index = (unsigned int)((context->count[0] >> 3) & 0x3F);
-// /* Update number of bits */
-// if ((context->count[0] += ((UINT4)inputLen << 3))
-// < ((UINT4)inputLen << 3))
-// context->count[1]++;
-// context->count[1] += ((UINT4)inputLen >> 29);
-//
-// partLen = 64 - index;
-//
-//
-//
-//Rivest [Page 10]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// /* Transform as many times as possible.
-// */
-// if (inputLen >= partLen) {
-// MD4_memcpy
-// ((POINTER)&context->buffer[index], (POINTER)input, partLen);
-// MD4Transform (context->state, context->buffer);
-//
-// for (i = partLen; i + 63 < inputLen; i += 64)
-// MD4Transform (context->state, &input[i]);
-//
-// index = 0;
-// }
-// else
-// i = 0;
-//
-// /* Buffer remaining input */
-// MD4_memcpy
-// ((POINTER)&context->buffer[index], (POINTER)&input[i],
-// inputLen-i);
-//}
-//
-///* MD4 finalization. Ends an MD4 message-digest operation, writing the
-// the message digest and zeroizing the context.
-// */
-//void MD4Final (digest, context)
-//unsigned char digest[16]; /* message digest */
-//MD4_CTX *context; /* context */
-//{
-// unsigned char bits[8];
-// unsigned int index, padLen;
-//
-// /* Save number of bits */
-// Encode (bits, context->count, 8);
-//
-// /* Pad out to 56 mod 64.
-// */
-// index = (unsigned int)((context->count[0] >> 3) & 0x3f);
-// padLen = (index < 56) ? (56 - index) : (120 - index);
-// MD4Update (context, PADDING, padLen);
-//
-// /* Append length (before padding) */
-// MD4Update (context, bits, 8);
-// /* Store state in digest */
-// Encode (digest, context->state, 16);
-//
-// /* Zeroize sensitive information.
-// */
-// MD4_memset ((POINTER)context, 0, sizeof (*context));
-//
-//
-//
-//Rivest [Page 11]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-//}
-//
-///* MD4 basic transformation. Transforms state based on block.
-// */
-//static void MD4Transform (state, block)
-//UINT4 state[4];
-//unsigned char block[64];
-//{
-// UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-//
-// Decode (x, block, 64);
-//
-// /* Round 1 */
-// FF (a, b, c, d, x[ 0], S11); /* 1 */
-// FF (d, a, b, c, x[ 1], S12); /* 2 */
-// FF (c, d, a, b, x[ 2], S13); /* 3 */
-// FF (b, c, d, a, x[ 3], S14); /* 4 */
-// FF (a, b, c, d, x[ 4], S11); /* 5 */
-// FF (d, a, b, c, x[ 5], S12); /* 6 */
-// FF (c, d, a, b, x[ 6], S13); /* 7 */
-// FF (b, c, d, a, x[ 7], S14); /* 8 */
-// FF (a, b, c, d, x[ 8], S11); /* 9 */
-// FF (d, a, b, c, x[ 9], S12); /* 10 */
-// FF (c, d, a, b, x[10], S13); /* 11 */
-// FF (b, c, d, a, x[11], S14); /* 12 */
-// FF (a, b, c, d, x[12], S11); /* 13 */
-// FF (d, a, b, c, x[13], S12); /* 14 */
-// FF (c, d, a, b, x[14], S13); /* 15 */
-// FF (b, c, d, a, x[15], S14); /* 16 */
-//
-// /* Round 2 */
-// GG (a, b, c, d, x[ 0], S21); /* 17 */
-// GG (d, a, b, c, x[ 4], S22); /* 18 */
-// GG (c, d, a, b, x[ 8], S23); /* 19 */
-// GG (b, c, d, a, x[12], S24); /* 20 */
-// GG (a, b, c, d, x[ 1], S21); /* 21 */
-// GG (d, a, b, c, x[ 5], S22); /* 22 */
-// GG (c, d, a, b, x[ 9], S23); /* 23 */
-// GG (b, c, d, a, x[13], S24); /* 24 */
-// GG (a, b, c, d, x[ 2], S21); /* 25 */
-// GG (d, a, b, c, x[ 6], S22); /* 26 */
-// GG (c, d, a, b, x[10], S23); /* 27 */
-// GG (b, c, d, a, x[14], S24); /* 28 */
-// GG (a, b, c, d, x[ 3], S21); /* 29 */
-// GG (d, a, b, c, x[ 7], S22); /* 30 */
-// GG (c, d, a, b, x[11], S23); /* 31 */
-// GG (b, c, d, a, x[15], S24); /* 32 */
-//
-//
-//
-//
-//Rivest [Page 12]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// /* Round 3 */
-// HH (a, b, c, d, x[ 0], S31); /* 33 */
-// HH (d, a, b, c, x[ 8], S32); /* 34 */
-// HH (c, d, a, b, x[ 4], S33); /* 35 */
-// HH (b, c, d, a, x[12], S34); /* 36 */
-// HH (a, b, c, d, x[ 2], S31); /* 37 */
-// HH (d, a, b, c, x[10], S32); /* 38 */
-// HH (c, d, a, b, x[ 6], S33); /* 39 */
-// HH (b, c, d, a, x[14], S34); /* 40 */
-// HH (a, b, c, d, x[ 1], S31); /* 41 */
-// HH (d, a, b, c, x[ 9], S32); /* 42 */
-// HH (c, d, a, b, x[ 5], S33); /* 43 */
-// HH (b, c, d, a, x[13], S34); /* 44 */
-// HH (a, b, c, d, x[ 3], S31); /* 45 */
-// HH (d, a, b, c, x[11], S32); /* 46 */
-// HH (c, d, a, b, x[ 7], S33); /* 47 */
-// HH (b, c, d, a, x[15], S34); /* 48 */
-//
-// state[0] += a;
-// state[1] += b;
-// state[2] += c;
-// state[3] += d;
-//
-// /* Zeroize sensitive information.
-// */
-// MD4_memset ((POINTER)x, 0, sizeof (x));
-//}
-//
-///* Encodes input (UINT4) into output (unsigned char). Assumes len is
-// a multiple of 4.
-// */
-//static void Encode (output, input, len)
-//unsigned char *output;
-//UINT4 *input;
-//unsigned int len;
-//{
-// unsigned int i, j;
-//
-// for (i = 0, j = 0; j < len; i++, j += 4) {
-// output[j] = (unsigned char)(input[i] & 0xff);
-// output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
-// output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
-// output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
-// }
-//}
-//
-///* Decodes input (unsigned char) into output (UINT4). Assumes len is
-// a multiple of 4.
-//
-//
-//
-//Rivest [Page 13]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// */
-//static void Decode (output, input, len)
-//
-//UINT4 *output;
-//unsigned char *input;
-//unsigned int len;
-//{
-// unsigned int i, j;
-//
-// for (i = 0, j = 0; j < len; i++, j += 4)
-// output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
-// (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
-//}
-//
-///* Note: Replace "for loop" with standard memcpy if possible.
-// */
-//static void MD4_memcpy (output, input, len)
-//POINTER output;
-//POINTER input;
-//unsigned int len;
-//{
-// unsigned int i;
-//
-// for (i = 0; i < len; i++)
-// output[i] = input[i];
-//}
-//
-///* Note: Replace "for loop" with standard memset if possible.
-// */
-//static void MD4_memset (output, value, len)
-//POINTER output;
-//int value;
-//unsigned int len;
-//{
-// unsigned int i;
-//
-// for (i = 0; i < len; i++)
-// ((char *)output)[i] = (char)value;
-//}
-//
-//A.4 mddriver.c
-//
-///* MDDRIVER.C - test driver for MD2, MD4 and MD5
-// */
-//
-///* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All
-// rights reserved.
-//
-//
-//
-//
-//Rivest [Page 14]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// RSA Data Security, Inc. makes no representations concerning either
-// the merchantability of this software or the suitability of this
-// software for any particular purpose. It is provided "as is"
-// without express or implied warranty of any kind.
-//
-// These notices must be retained in any copies of any part of this
-// documentation and/or software.
-//
-// */
-//
-///* The following makes MD default to MD5 if it has not already been
-// defined with C compiler flags.
-// */
-//#ifndef MD
-//#define MD MD5
-//#endif
-//
-//#include <stdio.h>
-//#include <time.h>
-//#include <string.h>
-//#include "global.h"
-//#if MD == 2
-//#include "md2.h"
-//#endif
-//#if MD == 4
-//#include "md4.h"
-//#endif
-//#if MD == 5
-//#include "md5.h"
-//#endif
-//
-///* Length of test block, number of test blocks.
-// */
-//#define TEST_BLOCK_LEN 1000
-//#define TEST_BLOCK_COUNT 1000
-//
-//static void MDString PROTO_LIST ((char *));
-//static void MDTimeTrial PROTO_LIST ((void));
-//static void MDTestSuite PROTO_LIST ((void));
-//static void MDFile PROTO_LIST ((char *));
-//static void MDFilter PROTO_LIST ((void));
-//static void MDPrint PROTO_LIST ((unsigned char [16]));
-//
-//#if MD == 2
-//#define MD_CTX MD2_CTX
-//#define MDInit MD2Init
-//#define MDUpdate MD2Update
-//#define MDFinal MD2Final
-//
-//
-//
-//Rivest [Page 15]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-//#endif
-//#if MD == 4
-//#define MD_CTX MD4_CTX
-//#define MDInit MD4Init
-//#define MDUpdate MD4Update
-//#define MDFinal MD4Final
-//#endif
-//#if MD == 5
-//#define MD_CTX MD5_CTX
-//#define MDInit MD5Init
-//#define MDUpdate MD5Update
-//#define MDFinal MD5Final
-//#endif
-//
-///* Main driver.
-//
-// Arguments (may be any combination):
-// -sstring - digests string
-// -t - runs time trial
-// -x - runs test script
-// filename - digests file
-// (none) - digests standard input
-// */
-//int main (argc, argv)
-//int argc;
-//char *argv[];
-//{
-// int i;
-//
-// if (argc > 1)
-// for (i = 1; i < argc; i++)
-// if (argv[i][0] == '-' && argv[i][1] == 's')
-// MDString (argv[i] + 2);
-// else if (strcmp (argv[i], "-t") == 0)
-// MDTimeTrial ();
-// else if (strcmp (argv[i], "-x") == 0)
-// MDTestSuite ();
-// else
-// MDFile (argv[i]);
-// else
-// MDFilter ();
-//
-// return (0);
-//}
-//
-///* Digests a string and prints the result.
-// */
-//static void MDString (string)
-//
-//
-//
-//Rivest [Page 16]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-//char *string;
-//{
-// MD_CTX context;
-// unsigned char digest[16];
-// unsigned int len = strlen (string);
-//
-// MDInit (&context);
-// MDUpdate (&context, string, len);
-// MDFinal (digest, &context);
-//
-// printf ("MD%d (\"%s\") = ", MD, string);
-// MDPrint (digest);
-// printf ("\n");
-//}
-//
-///* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte
-// blocks.
-// */
-//static void MDTimeTrial ()
-//{
-// MD_CTX context;
-// time_t endTime, startTime;
-// unsigned char block[TEST_BLOCK_LEN], digest[16];
-// unsigned int i;
-//
-// printf
-// ("MD%d time trial. Digesting %d %d-byte blocks ...", MD,
-// TEST_BLOCK_LEN, TEST_BLOCK_COUNT);
-//
-// /* Initialize block */
-// for (i = 0; i < TEST_BLOCK_LEN; i++)
-// block[i] = (unsigned char)(i & 0xff);
-//
-// /* Start timer */
-// time (&startTime);
-//
-// /* Digest blocks */
-// MDInit (&context);
-// for (i = 0; i < TEST_BLOCK_COUNT; i++)
-// MDUpdate (&context, block, TEST_BLOCK_LEN);
-// MDFinal (digest, &context);
-//
-// /* Stop timer */
-// time (&endTime);
-//
-// printf (" done\n");
-// printf ("Digest = ");
-// MDPrint (digest);
-//
-//
-//
-//Rivest [Page 17]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// printf ("\nTime = %ld seconds\n", (long)(endTime-startTime));
-// printf
-// ("Speed = %ld bytes/second\n",
-// (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime));
-//}
-//
-///* Digests a reference suite of strings and prints the results.
-// */
-//static void MDTestSuite ()
-//{
-// printf ("MD%d test suite:\n", MD);
-//
-// MDString ("");
-// MDString ("a");
-// MDString ("abc");
-// MDString ("message digest");
-// MDString ("abcdefghijklmnopqrstuvwxyz");
-// MDString
-// ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
-// MDString
-//
-// ("1234567890123456789012345678901234567890\
-//1234567890123456789012345678901234567890");
-//}
-//
-///* Digests a file and prints the result.
-// */
-//static void MDFile (filename)
-//char *filename;
-//{
-// FILE *file;
-// MD_CTX context;
-// int len;
-// unsigned char buffer[1024], digest[16];
-//
-// if ((file = fopen (filename, "r")) == NULL)
-// printf ("%s can't be opened\n", filename);
-//
-// else {
-// MDInit (&context);
-// while (len = fread (buffer, 1, 1024, file))
-// MDUpdate (&context, buffer, len);
-// MDFinal (digest, &context);
-//
-// fclose (file);
-//
-// printf ("MD%d (%s) = ", MD, filename);
-// MDPrint (digest);
-//
-//
-//
-//Rivest [Page 18]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-// printf ("\n");
-// }
-//}
-//
-///* Digests the standard input and prints the result.
-// */
-//static void MDFilter ()
-//{
-// MD_CTX context;
-// int len;
-// unsigned char buffer[16], digest[16];
-//
-// MDInit (&context);
-// while (len = fread (buffer, 1, 16, stdin))
-// MDUpdate (&context, buffer, len);
-// MDFinal (digest, &context);
-//
-// MDPrint (digest);
-// printf ("\n");
-//}
-//
-///* Prints a message digest in hexadecimal.
-// */
-//static void MDPrint (digest)
-//unsigned char digest[16];
-//
-//{
-// unsigned int i;
-//
-// for (i = 0; i < 16; i++)
-// printf ("%02x", digest[i]);
-//}
-//
-//A.5 Test suite
-//
-// The MD4 test suite (driver option "-x") should print the following
-// results:
-//
-//MD4 test suite:
-//MD4 ("") = 31d6cfe0d16ae931b73c59d7e0c089c0
-//MD4 ("a") = bde52cb31de33e46245e05fbdbd6fb24
-//MD4 ("abc") = a448017aaf21d8525fc10ae87aa6729d
-//MD4 ("message digest") = d9130a8164549fe818874806e1c7014b
-//MD4 ("abcdefghijklmnopqrstuvwxyz") = d79e1c308aa5bbcdeea8ed63df412da9
-//MD4 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
-//043f8582f241db351ce627e153e7f0e4
-//MD4 ("123456789012345678901234567890123456789012345678901234567890123456
-//78901234567890") = e33b4ddc9c38f2199c3e7b164fcc0536
-//
-//
-//
-//Rivest [Page 19]
-//
-//RFC 1320 MD4 Message-Digest Algorithm April 1992
-//
-//
-//Security Considerations
-//
-// The level of security discussed in this memo is considered to be
-// sufficient for implementing moderate security hybrid digital-
-// signature schemes based on MD4 and a public-key cryptosystem. We do
-// not know of any reason that MD4 would not be sufficient for
-// implementing very high security digital-signature schemes, but
-// because MD4 was designed to be exceptionally fast, it is "at the
-// edge" in terms of risking successful cryptanalytic attack. After
-// further critical review, it may be appropriate to consider MD4 for
-// very high security applications. For very high security applications
-// before the completion of that review, the MD5 algorithm [4] is
-// recommended.
-//
-//Author's Address
-//
-// Ronald L. Rivest
-// Massachusetts Institute of Technology
-// Laboratory for Computer Science
-// NE43-324
-// 545 Technology Square
-// Cambridge, MA 02139-1986
-//
-// Phone: (617) 253-5880
-//
-
-
-public class TestMD4 {
- public static void main(String args[]) {
- test("");
- test("a");
- test("abc");
- test("abcdefghijklmnopqrstuvwxyz");
- test("hi");
- MD4 md4 = new MD4();
-
- byte data[]=
- {
- (byte) 0x71,
- (byte) 0xa9,
- (byte) 0x05,
- (byte) 0xce,
- (byte) 0x8d,
- (byte) 0x75,
- (byte) 0x28,
- (byte) 0xc8,
- (byte) 0xba,
- (byte) 0x97,
-
- (byte) 0x45,
- (byte) 0xe9,
- (byte) 0x8a,
- (byte) 0xe0,
- (byte) 0x37,
- (byte) 0xbd,
- (byte) 0x6c,
- (byte) 0x6d,
- (byte) 0x67,
- (byte) 0x4a,
- (byte) 0x21 };
-
- System.out.println("checksum=" + MD4.Com_BlockChecksum(data, 21));
-
- }
-
- public static void test(String s) {
- MD4 md4 = new MD4();
-
- md4.engineUpdate(s.getBytes(), 0, s.length());
- System.out.println("\"" + s + "\"");
- System.out.print(Lib.hexDump(md4.engineDigest(), 16, false));
- }
-}
diff --git a/test/jake2/qcommon/TestMSG.java b/test/jake2/qcommon/TestMSG.java
deleted file mode 100644
index 9c2ba31..0000000
--- a/test/jake2/qcommon/TestMSG.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Created on 30.01.2004
- *
- * To change this generated comment go to
- * Window>Preferences>Java>Code Generation>Code Template
- */
-package jake2.qcommon;
-
-import jake2.Defines;
-/**
- * @author rst
- */
-public class TestMSG extends MSG {
- public static void main(String[] args) {
-
- byte buf_data[] = new byte[Defines.MAX_MSGLEN];
- sizebuf_t buf = new sizebuf_t();
-
- SZ.Init(buf, buf_data, Defines.MAX_MSGLEN);
-
- MSG.WriteInt(buf, 0x80000000);
- MSG.WriteInt(buf, 0x12345678);
- MSG.WriteInt(buf, 0x7fffffff);
- MSG.WriteInt(buf, 0xffffffff);
-
-
- MSG.WriteByte(buf, 1);
- MSG.WriteByte(buf, 2);
- MSG.WriteByte(buf, 3);
- MSG.WriteByte(buf, 4);
- SZ.Print(buf, "[einz]\n");
- SZ.Print(buf, "[zwei]...");
-
- MSG.WriteByte(buf, 0xfe);
- MSG.WriteByte(buf, 4);
-
- MSG.WriteShort(buf, 32766);
- MSG.WriteShort(buf, 16384);
- MSG.WriteShort(buf, -32768);
-
-
-
- MSG.WriteFloat(buf, (float) Math.PI);
-
- System.out.println("Read:" + Integer.toHexString(MSG.ReadLong(buf)));
- System.out.println("Read:" + Integer.toHexString(MSG.ReadLong(buf)));
- System.out.println("Read:" + Integer.toHexString(MSG.ReadLong(buf)));
- System.out.println("Read:" + Integer.toHexString(MSG.ReadLong(buf)));
-
- System.out.println("Read:" + MSG.ReadByte(buf));
- System.out.println("Read:" + MSG.ReadByte(buf));
- System.out.println("Read:" + MSG.ReadByte(buf));
- System.out.println("Read:" + MSG.ReadByte(buf));
- System.out.println("Read:<" + MSG.ReadString(buf) + ">");
-
- System.out.println("Read:" + MSG.ReadByte(buf));
- System.out.println("Read:" + MSG.ReadByte(buf));
-
- System.out.println("Read:" + MSG.ReadShort(buf));
- System.out.println("Read:" + MSG.ReadShort(buf));
- System.out.println("Read:" + MSG.ReadShort(buf));
-
- System.out.println("Read:" + MSG.ReadFloat(buf));
- }
-
-}
diff --git a/test/jake2/qcommon/TestRotatePointAroundVector.java b/test/jake2/qcommon/TestRotatePointAroundVector.java
deleted file mode 100644
index 37ced72..0000000
--- a/test/jake2/qcommon/TestRotatePointAroundVector.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 24.01.2004 by RST.
-// $Id: TestRotatePointAroundVector.java,v 1.1 2004-07-07 19:59:58 hzi Exp $
-
-package jake2.qcommon;
-
-import jake2.util.Lib;
-import jake2.util.Math3D;
-
-import java.util.StringTokenizer;
-
-// import jake2.*;
-// import jake2.client.*;
-// import jake2.game.*;
-// import jake2.qcommon.*;
-// import jake2.render.*;
-// import jake2.server.*;
-
-public class TestRotatePointAroundVector
-{
-
- static String testperp[] =
- {
- " 0.009647 0.005551 -0.296153 == -0.006815 0.977844 0.209225",
- "-0.758731 0.039112 0.214241 == 0.076493 0.996836 -0.021599",
- " 0.113768 -0.311733 0.603937 == 0.939749 0.156803 -0.303783",
- "-0.466186 0.341352 0.104305 == 0.393279 -0.287967 0.873159",
- " 0.775436 0.779995 -0.863782 == 0.962981 -0.180665 0.200072",
- " 0.814734 0.288255 -0.669693 == -0.170216 0.975423 0.139913",
- "-0.667435 -0.429661 0.683953 == -0.260653 0.927747 0.267104",
- "-0.927300 -0.585577 -0.957522 == -0.128592 0.982768 -0.132783",
- " 0.242942 0.040065 0.092075 == -0.894528 0.291345 -0.339024",
- " 0.646724 -0.933291 -0.948063 == 0.981161 0.135531 0.137676",
- " 0.232663 -0.959211 0.253123 == 0.975522 0.212626 -0.056109",
- "-0.250403 0.458914 -0.208372 == -0.424561 0.778093 0.462945",
- " 0.194574 -0.775337 -0.556817 == 0.977607 0.170927 0.122753",
- " 0.741328 0.476465 -0.972738 == -0.126045 0.978140 0.165391",
- "-0.163294 -0.275933 -0.592179 == 0.858983 -0.216251 -0.464095",
- "-0.847422 -0.768890 -0.681753 == -0.206793 -0.187629 0.960225",
- "-0.919289 0.581288 0.198026 == 0.123803 -0.078283 0.989214",
- "-0.541896 -0.634396 0.228633 == 0.228399 0.267386 0.936129",
- " 0.210305 0.928218 -0.243859 == 0.975105 -0.214467 0.056344",
- "-0.399813 -0.891607 -0.711955 == 0.974389 -0.175720 -0.140314",
- " 0.769699 0.916032 0.251807 == -0.088408 -0.105215 0.990512",
- " 0.262079 -0.921695 -0.297379 == 0.965746 0.246954 0.079678",
- "-0.787958 -0.605119 -0.832105 == -0.186950 0.962327 -0.197425",
- " 0.891434 0.839237 0.815951 == -0.175581 -0.165300 0.970488",
- "-0.702145 -0.656422 -0.863553 == -0.186798 0.955158 -0.229739",
- " 0.473749 -0.795161 -0.679987 == 0.950461 0.236242 0.202023",
- "-0.756531 -0.950714 0.524613 == 0.138574 0.174143 0.974921",
- "-0.944200 0.293208 -0.783887 == 0.111872 0.989373 0.092878",
- "-0.380537 -0.962794 0.770586 == 0.984444 -0.137174 0.109789",
- " 0.019079 -0.668430 0.525818 == 0.999520 0.024358 -0.019161" };
-
- static String tests[] =
- {
- " 0.680375 -0.211234 0.566198 # 0.596880 0.823295 -0.604897 # 120.6802 == -0.655159 0.261707 0.743340 ",
- " 0.536459 -0.444451 0.107940 # -0.045206 0.257742 -0.270431 # 184.8243 == -0.193460 0.038827 0.159348 ",
- " 0.904459 0.832390 0.271423 # 0.434594 -0.716795 0.213938 # 5.8682 == 0.747359 -1.101788 0.087111 ",
- "-0.514226 -0.725537 0.608353 # -0.686642 -0.198111 -0.740419 # 39.1712 == -0.130630 -0.727312 -0.873737 ",
- " 0.997849 -0.563486 0.025865 # 0.678224 0.225280 -0.407937 # 229.5188 == 0.140445 -1.014774 -0.177662 ",
- " 0.048574 -0.012834 0.945550 # -0.414966 0.542715 0.053490 # 277.1690 == 0.464477 0.459346 0.005334 ",
- "-0.199543 0.783059 -0.433371 # -0.295083 0.615449 0.838053 # 25.1119 == 0.132556 0.605152 0.672271 ",
- " 0.898654 0.051991 -0.827888 # -0.615572 0.326454 0.780465 # 125.6015 == -0.908882 -0.423560 1.130438 ",
- "-0.871657 -0.959954 -0.084597 # -0.873808 -0.523440 0.941268 # 324.7949 == -0.817769 -1.385161 0.919210 ",
- " 0.701840 -0.466668 0.079521 # -0.249586 0.520498 0.025071 # 240.3806 == -0.284741 0.143251 -0.292353 ",
- " 0.063213 -0.921439 -0.124725 # 0.863670 0.861620 0.441905 # 102.3456 == -0.541507 0.588085 0.875724 ",
- " 0.477069 0.279958 -0.291903 # 0.375723 -0.668052 -0.119791 # 316.8271 == 0.464398 -0.177470 -0.014007 ",
- " 0.658402 -0.339326 -0.542064 # 0.786745 -0.299280 0.373340 # 344.3286 == 0.726676 -0.059072 0.259724 ",
- " 0.177280 0.314608 0.717353 # -0.120880 0.847940 -0.203127 # 293.3161 == 0.546512 0.263594 -0.238898 ",
- " 0.368437 0.821944 -0.035019 # -0.568350 0.900505 0.840257 # 53.1576 == 0.384098 0.383469 1.141096 ",
- " 0.762124 0.282161 -0.136093 # 0.239193 -0.437881 0.572004 # 110.6848 == -0.034934 -0.356566 -0.561636 ",
- "-0.105933 -0.547787 -0.624934 # -0.447531 0.112888 -0.166997 # 61.0586 == -0.074301 0.245476 -0.298803 ",
- " 0.813608 -0.793658 -0.747849 # -0.009112 0.520950 0.969503 # 336.6014 == -0.120939 1.510490 1.400521 ",
- " 0.368890 -0.233623 0.499542 # -0.262673 -0.411679 -0.535477 # 210.4159 == -0.050155 0.463231 0.348973 ",
- "-0.511174 -0.695220 0.464297 # -0.749050 0.586941 -0.671796 # 268.2257 == 0.022772 0.925406 0.668994 ",
- "-0.850940 0.900208 -0.894941 # 0.043127 -0.647579 -0.519875 # 287.2073 == 1.234205 -0.290291 -0.371230 ",
- " 0.465309 0.313127 0.934810 # 0.278917 0.519470 -0.813039 # 48.5649 == -0.362583 0.755727 -0.615632 ",
- " 0.040420 -0.843536 -0.860187 # -0.590690 -0.077159 0.639355 # 206.3947 == 0.769276 0.686703 0.210591 ",
- " 0.511162 -0.896122 -0.684386 # 0.999987 -0.591343 0.779911 # 45.1687 == 0.096778 -1.624548 1.110771 ",
- " 0.995598 -0.891885 0.741080 # -0.855342 -0.991677 0.846138 # 213.8012 == 2.588428 1.678911 0.857673 ",
- "-0.639255 -0.673737 -0.216620 # 0.826053 0.639390 -0.281809 # 198.8946 == 0.277942 0.729819 0.633058 ",
- " 0.158860 -0.094848 0.374775 # -0.800720 0.061616 0.514588 # 109.5463 == -0.113519 -0.154459 -0.215363 ",
- " 0.984457 0.153942 0.755228 # 0.495619 0.257820 -0.929158 # 269.2090 == 0.101893 -1.323990 -0.319552 ",
- " 0.666477 0.850753 0.746543 # 0.662075 0.958868 0.487622 # 325.2119 == 1.531004 1.350724 1.039028 ",
- " 0.967191 0.333761 -0.005483 # -0.672064 0.660024 0.777897 # 27.7181 == -0.548955 0.246637 1.090340 " };
-
- public static void testRotate(int i, String line)
- {
- StringTokenizer tk = new StringTokenizer(line);
-
- float dir[] = { 0, 0, 0 };
- float point[] = { 0, 0, 0 };
- float dst[] = { 0, 0, 0 };
- float newdst[] = { 0, 0, 0 };
- float degrees = 0;
-
- dir[0] = Float.parseFloat(tk.nextToken());
- dir[1] = Float.parseFloat(tk.nextToken());
- dir[2] = Float.parseFloat(tk.nextToken());
-
- tk.nextToken();
-
- point[0] = Float.parseFloat(tk.nextToken());
- point[1] = Float.parseFloat(tk.nextToken());
- point[2] = Float.parseFloat(tk.nextToken());
-
- tk.nextToken();
-
- degrees = Float.parseFloat(tk.nextToken());
-
- tk.nextToken();
-
- dst[0] = Float.parseFloat(tk.nextToken());
- dst[1] = Float.parseFloat(tk.nextToken());
- dst[2] = Float.parseFloat(tk.nextToken());
-
- Math3D.RotatePointAroundVector(newdst, dir, point, degrees);
-
-
- System.out.println("" + i + ":" + Lib.vtofs(dst) + " : " + Lib.vtofs(newdst));
-
- }
-
- public static void testPerpend(int i, String line)
- {
- StringTokenizer tk = new StringTokenizer(line);
-
- float dir[] = { 0, 0, 0 };
-
- float dst[] = { 0, 0, 0 };
-
- float newdst[] = { 0, 0, 0 };
-
- dir[0] = Float.parseFloat(tk.nextToken());
- dir[1] = Float.parseFloat(tk.nextToken());
- dir[2] = Float.parseFloat(tk.nextToken());
-
- tk.nextToken();
-
- dst[0] = Float.parseFloat(tk.nextToken());
- dst[1] = Float.parseFloat(tk.nextToken());
- dst[2] = Float.parseFloat(tk.nextToken());
-
- Math3D.PerpendicularVector(newdst, dir);
-
- System.out.println("" + i + ":" + Lib.vtofs(dst) + " : " + Lib.vtofs(newdst));
-
- }
-
- public static void main(String[] args)
- {
-
- System.out.println("DEG2RAD:" + Math3D.DEG2RAD(205));
-
- System.out.println("testperpendicular...");
- for (int n = 0; n < testperp.length; n++)
- testPerpend(n, testperp[n]);
-
-
- System.out.println("testrotate...");
- for (int n = 0; n < tests.length; n++)
- testRotate(n, tests[n]);
- }
-
-}
diff --git a/test/jake2/render/DancingQueens.java b/test/jake2/render/DancingQueens.java
deleted file mode 100644
index 194ee18..0000000
--- a/test/jake2/render/DancingQueens.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * DancingQueens.java
- * Copyright (C) 2003
- *
- * $Id: DancingQueens.java,v 1.7 2005-02-09 09:21:10 cawe Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.render;
-
-import jake2.Defines;
-import jake2.Globals;
-import jake2.client.*;
-import jake2.game.Cmd;
-import jake2.game.cvar_t;
-import jake2.qcommon.*;
-import jake2.sys.IN;
-import jake2.sys.KBD;
-import jake2.util.Math3D;
-import jake2.util.Vargs;
-
-import java.awt.Dimension;
-import java.util.Arrays;
-
-
-/**
- * DancingQueens
- *
- * @author cwei
- */
-public class DancingQueens
-{
- String[] args;
-
- refexport_t re;
- viddef_t viddef;
- int framecount = 0;
-
- public DancingQueens(String[] args) {
- this.args = args;
- }
-
- public static void main(String[] args) {
-
- DancingQueens test = new DancingQueens(args);
- test.init();
- test.run();
- }
-
- KBD kbd;
-
- void init() {
-
- Qcommon.Init(new String[] {"DancingQueens", "+set", "s_initsound", "0", "+set", "vid_ref", "lwjgl"});
- // sehr wichtig !!!
- VID.Shutdown();
-
- String[] names = Renderer.getDriverNames();
- System.out.println("Registered Drivers: " + Arrays.asList(names));
-
- this.re = Renderer.getDriver("lwjgl");
-
- System.out.println("Use driver: " + re);
- System.out.println();
-
- re.Init(0, 0);
- kbd = re.getKeyboardHandler();
- kbd.Init();
-
- Cmd.AddCommand("togglemouse", togglemouse);
- Cbuf.AddText("bind t togglemouse");
- Cbuf.Execute();
- Globals.cls.key_dest = Defines.key_game;
- Globals.cls.state = Defines.ca_active;
-
- viddef = Globals.viddef;
- fov_y = Math3D.CalcFov(fov_x, viddef.width, viddef.height);
- }
-
- float fps = 0.0f;
- long start = 0;
-
- void updateScreen()
- {
- re.BeginFrame(0.0f);
-
- if (framecount % 500 == 0)
- {
- long time = System.currentTimeMillis();
- fps = 500000.0f / (time - start);
- start = time;
- }
- String text = fps + " fps";
-
- testModel();
-
- drawString(10, viddef.height - 16, text);
-
- re.EndFrame();
- framecount++;
- }
-
- long startTime;
-
- void run()
- {
- startTime = System.currentTimeMillis();
- xcommand_t callback = new xcommand_t() {
- public void execute() {
- updateScreen();
- }
- };
- while (true)
- {
- re.updateScreen(callback);
- kbd.Update();
- Cbuf.Execute();
- }
- }
-
-// ===================================================================
-
- private float yaw = 0;
- private entity_t[] models;
-
- private final static String[] skinNames = {
- "players/female/athena",
- "players/female/lotus",
- "players/female/venus",
- "players/female/voodoo",
- "players/female/cobalt",
- "players/female/lotus",
- "players/female/brianna"
- };
-
- private float fov_x = 50;
- private float fov_y;
-
- private void testModel() {
-
- refdef_t refdef = new refdef_t();
-
- refdef.x = 0;
- refdef.y = 0;
- refdef.width = viddef.width;
- refdef.height = viddef.height;
- refdef.fov_x = fov_x;
- refdef.fov_y = fov_y;
- refdef.time = 1.0f * 0.001f;
-
- if (models == null) {
- models = new entity_t[12]; // model count
- entity_t m = null;
- for (int i = 0; i < models.length; i++)
- {
- m = getModel(skinNames[i % skinNames.length]);
- m.origin[0] += 30 * i;
- m.origin[1] += ((i % 4)) * 30 - 20;
- models[i] = m;
- }
- }
-
-
- yaw = time() * 0.1f;
- if (yaw > 360)
- yaw -= 360;
- if (yaw < 0)
- yaw += 360;
-
- for (int i = 0; i < models.length; i++)
- {
- models[i].frame = (time() / 70) % models[i].model.numframes;
- models[i].angles[1] = yaw;
- models[i].origin[0] += KBD.my;
- models[i].origin[1] += KBD.mx;
-
- }
-
- refdef.areabits = null;
- refdef.num_entities = models.length;
- refdef.entities = models;
-
- refdef.lightstyles = null;
- refdef.rdflags = Defines.RDF_NOWORLDMODEL;
-
- re.RenderFrame(refdef);
- }
-
- private entity_t getModel(String name) {
- entity_t entity = new entity_t();
- String modelName = "players/female/tris.md2";
- String modelSkin = name +".pcx";
-
- entity.model = re.RegisterModel(modelName);
- entity.skin = re.RegisterSkin(modelSkin);
- entity.flags = Defines.RF_FULLBRIGHT;
- entity.origin[0] = 80;
- entity.origin[1] = 0;
- entity.origin[2] = 0;
- Math3D.VectorCopy(entity.origin, entity.oldorigin);
- entity.frame = 0;
- entity.oldframe = 0;
- entity.backlerp = 0.0f;
- return entity;
- }
-
-
- private void drawString(int x, int y, String text)
- {
- for (int i = 0; i < text.length(); i++)
- {
- re.DrawChar(x + 8 * i, y, (int) text.charAt(i));
- }
- }
-
- private final int time()
- {
- return (int) (System.currentTimeMillis() - startTime);
- }
-
- static xcommand_t togglemouse = new xcommand_t() {
- public void execute() {
- IN.toggleMouse();
- }
- };
-} \ No newline at end of file
diff --git a/test/jake2/render/DebugCulling.java b/test/jake2/render/DebugCulling.java
deleted file mode 100644
index b92b95c..0000000
--- a/test/jake2/render/DebugCulling.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * DebugCulling.java
- * Copyright (C) 2003
- *
- * $Id: DebugCulling.java,v 1.4 2004-12-14 01:08:32 cawe Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.render;
-
-import jake2.Defines;
-import jake2.Globals;
-import jake2.client.*;
-import jake2.game.Cmd;
-import jake2.game.cvar_t;
-import jake2.qcommon.*;
-import jake2.sys.KBD;
-import jake2.util.Vargs;
-
-import java.awt.Dimension;
-
-/**
- * DebugCulling
- *
- * @author cwei
- */
-public class DebugCulling
-{
-
- static final float INSTANT_PARTICLE = -10000.0f;
- static final float PARTICLE_GRAVITY = 40.0f;
-
- String[] args;
-
- refexport_t re;
- viddef_t viddef;
- int framecount = 0;
-
- public DebugCulling(String[] args)
- {
- this.args = args;
- }
-
- public static void main(String[] args)
- {
-
- DebugCulling test = new DebugCulling(args);
- test.init();
- test.run();
- }
-
- void init()
- {
-
- Qcommon.Init(new String[] { "$Id: DebugCulling.java,v 1.4 2004-12-14 01:08:32 cawe Exp $" });
- // sehr wichtig !!!
- VID.Shutdown();
-
- this.re = Renderer.getDriver("jogl");
-
- re.Init(0, 0);
-
- viddef = Globals.viddef;
- }
-
- float fps = 0.0f;
- long start = 0;
- long startTime;
-
- void run()
- {
- startTime = System.currentTimeMillis();
- while (true)
- {
- re.updateScreen(null);
- re.getKeyboardHandler().Update();
-// try {
-// Thread.sleep(5);
-// }
-// catch (InterruptedException e) {
-// }
- }
- }
-
- int currentState = 0;
-
- void updateScreen()
- {
- re.BeginFrame(0.0f);
-
- switch (currentState)
- {
- case 0 :
- re.DrawStretchPic(0, 0, viddef.width, viddef.height, "conback");
- re.DrawPic(viddef.width / 2 - 50, viddef.height / 2, "loading");
- currentState = 1;
- break;
- case 1 :
- // register the map
- re.SetSky("space1", 0, new float[]{ 0, 0, 0 });
- re.BeginRegistration("ColorTest");
- re.EndRegistration();
- currentState = 2;
- //break;
- default :
- if (framecount % 500 == 0)
- {
- long time = System.currentTimeMillis();
- fps = 500000.0f / (time - start);
- start = time;
- }
- String text = fps + " fps";
-
- testMap();
-
- drawString(10, viddef.height - 16, text);
- }
-
- re.EndFrame();
- framecount++;
- }
-
- // ===================================================================
-
- private float yaw = 0;
-
- private float fov_x = 90;
-
- private refdef_t refdef;
-
- private void testMap()
- {
-
- if ( refdef == null ) {
- refdef = new refdef_t();
-
- refdef.x = 0;
- refdef.y = 0;
- refdef.width = viddef.width;
- refdef.height = viddef.height;
- refdef.fov_x = fov_x;
- refdef.fov_y = CalcFov(fov_x, refdef.width -10, refdef.height-10);
- refdef.vieworg = new float[] {0, 0, 0};
-
- refdef.viewangles[0] = 0;
- refdef.viewangles[1] = 90;
- refdef.viewangles[2] = 0;
-
- refdef.blend = new float[] { 0.0f, 0.0f, 0.0f, 0.0f };
-
- refdef.areabits = null; // draw all
-// refdef.areabits = new byte[Defines.MAX_MAP_AREAS / 8];
-// Arrays.fill(refdef.areabits, (byte) 0xFF);
-
-
- refdef.num_entities = 0;
- refdef.entities = null;
-
- lightstyle_t light = new lightstyle_t();
- light.rgb = new float[] {1.0f, 1.0f, 1.0f};
- light.white = 3.0f;
-
- refdef.lightstyles = new lightstyle_t[Defines.MAX_LIGHTSTYLES];
- for (int i = 0; i < Defines.MAX_LIGHTSTYLES; i++)
- {
- refdef.lightstyles[i] = new lightstyle_t();
- refdef.lightstyles[i].rgb = new float[] { 1.0f, 1.0f, 1.0f };
- refdef.lightstyles[i].white = 3.0f; // r + g + b
- }
-
- }
-
- refdef.time = time() * 0.001f;
-
- refdef.viewangles[0] += KBD.my * 0.1f;
- refdef.viewangles[1] -= KBD.mx * 0.1f;
-
- refdef.vieworg[0] = 0; // + 30 * (float)Math.sin(time() * 0.0005f);
- refdef.vieworg[1] = -79;
- refdef.vieworg[2] = -131;
-
- // wichtig da aufloesung 1/8
- // --> ebenen schneiden nie genau die sicht
- refdef.vieworg[0] += 1.0f / 16;
- refdef.vieworg[1] += 1.0f / 16;
- refdef.vieworg[2] += 1.0f / 16;
-
- re.RenderFrame(refdef);
- }
-
- private float CalcFov(float fov_x, float width, float height)
- {
- double a;
- double x;
-
- if (fov_x < 1 || fov_x > 179)
- Com.Error(Defines.ERR_DROP, "Bad fov: " + fov_x);
-
- x = width / Math.tan(fov_x / 360 * Math.PI);
-
- a = Math.atan(height / x);
-
- a = a * 360 / Math.PI;
-
- return (float) a;
- }
-
- private void drawString(int x, int y, String text)
- {
- for (int i = 0; i < text.length(); i++)
- {
- re.DrawChar(x + 8 * i, y, (int) text.charAt(i));
- }
- }
-
- private final int time()
- {
- return (int) (System.currentTimeMillis() - startTime);
- }
-
-} \ No newline at end of file
diff --git a/test/jake2/render/DisposeBuffer.java b/test/jake2/render/DisposeBuffer.java
deleted file mode 100644
index d17157c..0000000
--- a/test/jake2/render/DisposeBuffer.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Created on May 13, 2005
- *
- */
-package jake2.render;
-
-import java.nio.Buffer;
-import java.nio.ByteBuffer;
-
-/**
- * @author cwei
- *
- */
-public class DisposeBuffer {
-
- // 160 MB direct buffers
- static int SIZE = 1024 * 1024;
- static int COUNT = 160;
-
- public static void main(String[] args) {
- System.out.println("DirectBuffer allocation.");
- Buffer[] buf = new Buffer[COUNT];
- Runtime run = Runtime.getRuntime();
- System.gc();
- for (int i = 0; i < COUNT; i++) {
- buf[i] = ByteBuffer.allocateDirect(SIZE);
- }
- System.gc();
- System.out.println((run.totalMemory() / 1024) + "KB heap");
- try {
- Thread.sleep(10000);
- } catch (InterruptedException e) {
- }
- System.out.println("DirectBuffer dispose.");
- for (int i = 0; i < COUNT; i++) {
- buf[i] = null;
- }
- System.gc();
- System.out.println((run.totalMemory() / 1024) + "KB heap");
- try {
- Thread.sleep(20000);
- } catch (InterruptedException e) {
- }
- }
-}
diff --git a/test/jake2/render/TestMap.java b/test/jake2/render/TestMap.java
deleted file mode 100644
index f1ade00..0000000
--- a/test/jake2/render/TestMap.java
+++ /dev/null
@@ -1,538 +0,0 @@
-/*
- * TestMap.java
- * Copyright (C) 2003
- *
- * $Id: TestMap.java,v 1.6 2004-12-14 01:08:32 cawe Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.render;
-
-import jake2.Defines;
-import jake2.Globals;
-import jake2.client.*;
-import jake2.game.Cmd;
-import jake2.game.cvar_t;
-import jake2.qcommon.*;
-import jake2.sys.IN;
-import jake2.sys.KBD;
-import jake2.util.*;
-
-import java.awt.Dimension;
-import java.nio.FloatBuffer;
-import java.util.*;
-
-/**
- * TestMap
- *
- * @author cwei
- */
-public class TestMap
-{
-
- static final float INSTANT_PARTICLE = -10000.0f;
- static final float PARTICLE_GRAVITY = 40.0f;
-
- String[] args;
-
- refexport_t re;
- viddef_t viddef;
- int framecount = 0;
-
- public TestMap(String[] args)
- {
- this.args = args;
- }
-
- public static void main(String[] args)
- {
-
- TestMap test = new TestMap(args);
- test.init();
- test.run();
- }
-
- void init()
- {
-
- Qcommon.Init(new String[] { "TestMap $Id: TestMap.java,v 1.6 2004-12-14 01:08:32 cawe Exp $" });
- // sehr wichtig !!!
- VID.Shutdown();
-
- this.re = Renderer.getDriver("jogl");
-
- re.Init(0, 0);
-
- // init keyboard
- Cmd.AddCommand("+tforward", forward_down);
- Cmd.AddCommand("-tforward", forward_up);
- Cbuf.AddText("bind UPARROW +tforward");
- Cbuf.Execute();
- Cmd.AddCommand("+tbackward", backward_down);
- Cmd.AddCommand("-tbackward", backward_up);
- Cbuf.AddText("bind DOWNARROW +tbackward");
- Cbuf.Execute();
- Cmd.AddCommand("+tleft", left_down);
- Cmd.AddCommand("-tleft", left_up);
- Cbuf.AddText("bind LEFTARROW +tleft");
- Cbuf.Execute();
- Cmd.AddCommand("+tright", right_down);
- Cmd.AddCommand("-tright", right_up);
- Cbuf.AddText("bind RIGHTARROW +tright");
- Cbuf.Execute();
- Cmd.AddCommand("togglemouse", togglemouse);
- Cbuf.AddText("bind t togglemouse");
- Cbuf.Execute();
- Globals.cls.key_dest = Defines.key_game;
- Globals.cls.state = Defines.ca_active;
-
- viddef = Globals.viddef;
- }
-
- float fps = 0.0f;
- long start = 0;
- long startTime;
-
- void run()
- {
- startTime = System.currentTimeMillis();
- xcommand_t callback = new xcommand_t() {
- public void execute() {
- updateScreen();
- }
- };
- while (true)
- {
- re.updateScreen(callback);
- re.getKeyboardHandler().Update();
- Cbuf.Execute();
- }
- }
-
- int currentState = 0;
-
- void updateScreen()
- {
- re.BeginFrame(0.0f);
-
- switch (currentState)
- {
- case 0 :
- re.DrawStretchPic(0, 0, viddef.width, viddef.height, "conback");
- re.DrawPic(viddef.width / 2 - 50, viddef.height / 2, "loading");
- currentState = 1;
- break;
- case 1 :
- // register the map
- re.BeginRegistration("base1");
- re.SetSky("space1", 0, new float[]{ 0, 0, 0 });
- re.EndRegistration();
- currentState = 2;
- //break;
- default :
- if (framecount % 500 == 0)
- {
- long time = System.currentTimeMillis();
- fps = 500000.0f / (time - start);
- start = time;
- }
- String text = fps + " fps";
-
- testMap();
-
- drawString(10, viddef.height - 16, text);
- }
-
- re.EndFrame();
- framecount++;
- }
-
- // ===================================================================
-
-
- static final int FORWARD = 2;
- static final int FORWARD_MASK = ~FORWARD;
- static final int BACKWARD = 4;
- static final int BACKWARD_MASK = ~BACKWARD;
- static final int LEFT = 8;
- static final int LEFT_MASK = ~LEFT;
- static final int RIGHT = 16;
- static final int RIGHT_MASK = ~RIGHT;
-
-
- int movePlayer = 0;
-
- // forward
- xcommand_t forward_down = new xcommand_t() {
- public void execute() {
- movePlayer |= FORWARD;
- movePlayer &= BACKWARD_MASK;
- }
- };
- xcommand_t forward_up = new xcommand_t() {
- public void execute() {
- movePlayer &= FORWARD_MASK;
- }
- };
- // backward
- xcommand_t backward_down = new xcommand_t() {
- public void execute() {
- movePlayer |= BACKWARD;
- movePlayer &= FORWARD_MASK;
- }
- };
- xcommand_t backward_up = new xcommand_t() {
- public void execute() {
- movePlayer &= BACKWARD_MASK;
- }
- };
- // left
- xcommand_t left_down = new xcommand_t() {
- public void execute() {
- movePlayer |= LEFT;
- movePlayer &= RIGHT_MASK;
- }
- };
- xcommand_t left_up = new xcommand_t() {
- public void execute() {
- movePlayer &= LEFT_MASK;
- }
- };
- // right
- xcommand_t right_down = new xcommand_t() {
- public void execute() {
- movePlayer |= RIGHT;
- movePlayer &= LEFT_MASK;
- }
- };
- xcommand_t right_up = new xcommand_t() {
- public void execute() {
- movePlayer &= RIGHT_MASK;
- }
- };
-
- private float yaw = 0;
-
- private float fov_x = 90;
-
- private refdef_t refdef;
-
- private entity_t ent;
-
- float[] vpn = {0, 0, 0};
- float[] vright = {0, 0, 0};
- float[] vup = {0, 0, 0};
-
- private void testMap()
- {
-
- if ( refdef == null ) {
- refdef = new refdef_t();
-
- refdef.x = 0;
- refdef.y = 0;
- refdef.width = viddef.width;
- refdef.height = viddef.height;
- refdef.fov_x = (Globals.fov == null) ? this.fov_x : Globals.fov.value;
- refdef.fov_x = this.fov_x;
- refdef.fov_y = Math3D.CalcFov(refdef.fov_x, refdef.width, refdef.height);
- refdef.vieworg = new float[] {140, -140, 50};
- refdef.viewangles = new float[] {0, 0, 0};
-
- refdef.blend = new float[] { 0.0f, 0.0f, 0.0f, 0.0f };
-
- refdef.areabits = null; // draw all
-// refdef.areabits = new byte[Defines.MAX_MAP_AREAS / 8];
-// Arrays.fill(refdef.areabits, (byte) 0xFF);
-
- // load a monster
- ent = new entity_t();
-
- model_t weapon = re.RegisterModel("models/monsters/soldier/tris.md2");
- image_t weaponSkin = re.RegisterSkin("models/monsters/soldier/skin.pcx");
-
- ent.model = weapon;
- ent.skin = weaponSkin;
- ent.origin = new float[] { -60, 80, 25 };
- Math3D.VectorCopy(ent.origin, ent.oldorigin);
- ent.angles = new float[] { 0, 300, 0 };
-
- refdef.num_entities = 1;
- refdef.entities = new entity_t[] {ent};
-
- lightstyle_t light = new lightstyle_t();
- light.rgb = new float[] {1.0f, 1.0f, 1.0f};
- light.white = 3.0f;
-
- refdef.lightstyles = new lightstyle_t[Defines.MAX_LIGHTSTYLES];
- for (int i = 0; i < Defines.MAX_LIGHTSTYLES; i++) {
- refdef.lightstyles[i] = new lightstyle_t();
- refdef.lightstyles[i].rgb = new float[] {1.0f, 1.0f, 1.0f};
- refdef.lightstyles[i].white = 3.0f; // r + g + b
- }
-
- refdef.viewangles[1] = 130;
- // set the start time
- refdef.time = time() * 0.001f;
- }
-
- refdef.viewangles[0] += KBD.my * 0.1f;
- refdef.viewangles[1] -= KBD.mx * 0.1f; // 90 + 180 * (float)Math.sin(time() * 0.0001f);
-
- float dt = time() * 0.001f - refdef.time;
-
- if (movePlayer != 0) {
-
- float velocity = 150f * dt;
- Math3D.AngleVectors(refdef.viewangles, vpn, vright, vup);
-
- // forward
- if ((movePlayer & FORWARD_MASK) != 0)
- Math3D.VectorMA(refdef.vieworg, -velocity, vpn, refdef.vieworg);
- // backward
- if ((movePlayer & BACKWARD_MASK) != 0)
- Math3D.VectorMA(refdef.vieworg, velocity, vpn, refdef.vieworg);
- // left
- if ((movePlayer & LEFT_MASK) != 0)
- Math3D.VectorMA(refdef.vieworg, velocity, vright, refdef.vieworg);
- // right
- if ((movePlayer & RIGHT_MASK) != 0)
- Math3D.VectorMA(refdef.vieworg, -velocity, vright, refdef.vieworg);
-
- // wichtig da aufloesung 1/8
- // --> ebenen schneiden nie genau die sicht
- refdef.vieworg[0] += 1.0f / 16;
- refdef.vieworg[1] += 1.0f / 16;
- refdef.vieworg[2] += 1.0f / 16;
- }
-
- refdef.time = time() * 0.001f;
-
- // particle init
- r_numparticles = 0;
-
- // check the enemy distance
- float[] diff = {0, 0, 0};
- Math3D.VectorSubtract( refdef.vieworg, ent.origin, diff);
-
- if (Math3D.VectorLength(diff) < 250 && active_particles.size() == 0) {
- RailTrail(ent.origin, refdef.vieworg);
- } else {
- // monster and partice animation
- if (active_particles.size() > 0) {
- // monster
- ent.frame = (int)((time() * 0.013f) % 15);
- // monster look at you :-)
- Math3D.VectorNormalize(diff);
- Math3D.vectoangles(diff, ent.angles);
-
- // particles
- animateParticles();
-
- refdef.num_particles = r_numparticles;
- }
- else {
- ent.frame = 0;
- refdef.num_particles = 0;
- }
- }
-
- refdef.num_dlights = 0;
-
- re.RenderFrame(refdef);
- }
-
- private LinkedList active_particles = new LinkedList();
- private boolean explode = false;
- private float[] target;
-
- private boolean initParticles = true;
-
- private void animateParticles()
- {
- cparticle_t p;
- float alpha;
- float time, time2;
- float[] org = {0, 0, 0};
- int color;
-
- time = 0.0f;
-
- for (Iterator it = active_particles.iterator(); it.hasNext();)
- {
- p = (cparticle_t) it.next();
-
- // PMM - added INSTANT_PARTICLE handling for heat beam
- if (p.alphavel != INSTANT_PARTICLE)
- {
- time = (time() - p.time) * 0.001f;
- alpha = p.alpha + time*p.alphavel;
- if (alpha <= 0)
- { // faded out
- it.remove();
- continue;
- }
- }
- else
- {
- alpha = p.alpha;
- }
-
- if (alpha > 1.0)
- alpha = 1;
- color = (int)p.color;
-
- time2 = time*time;
-
- org[0] = p.org[0] + p.vel[0]*time + p.accel[0]*time2;
- org[1] = p.org[1] + p.vel[1]*time + p.accel[1]*time2;
- org[2] = p.org[2] + p.vel[2]*time + p.accel[2]*time2;
-
- AddParticle(org, color, alpha);
-
- // PMM
- if (p.alphavel == INSTANT_PARTICLE)
- {
- p.alphavel = 0.0f;
- p.alpha = 0.0f;
- }
- }
- }
-
- private void RailTrail(float[] start, float[] end)
- {
- float[] move = {0, 0, 0};
- float[] vec = {0, 0, 0};
- float len;
- int j;
- cparticle_t p;
- float dec;
- float[] right = {0, 0, 0};
- float[] up = {0, 0, 0};
- int i;
- float d, c, s;
- float[] dir = {0, 0, 0};
-
- Math3D.VectorCopy (start, move);
- Math3D.VectorSubtract (end, start, vec);
- len = Math3D.VectorNormalize(vec);
-
- Math3D.MakeNormalVectors(vec, right, up);
-
- for (i=0 ; i<len ; i++)
- {
-
- p = new cparticle_t();
- p.time = time();
- Math3D.VectorClear (p.accel);
-
- d = i * 0.1f;
- c = (float)Math.cos(d);
- s = (float)Math.sin(d);
-
- Math3D.VectorScale (right, c, dir);
- Math3D.VectorMA (dir, s, up, dir);
-
- p.alpha = 1.0f;
- p.alphavel = -1.0f / (1 + Globals.rnd.nextFloat() * 0.2f);
- p.color = 0x74 + (Lib.rand() & 7);
- for (j=0 ; j<3 ; j++)
- {
- p.org[j] = move[j] + dir[j]*3;
- p.vel[j] = dir[j]*6;
- }
-
- Math3D.VectorAdd (move, vec, move);
-
- active_particles.add(p);
- }
-
- dec = 0.75f;
- Math3D.VectorScale (vec, dec, vec);
- Math3D.VectorCopy (start, move);
-
- while (len > 0)
- {
- len -= dec;
-
- p = new cparticle_t();
-
- p.time = time();
- Math3D.VectorClear (p.accel);
-
- p.alpha = 1.0f;
- p.alphavel = -1.0f / (0.6f + Globals.rnd.nextFloat() * 0.2f);
- p.color = 0x0 + Lib.rand()&15;
-
- for (j=0 ; j<3 ; j++)
- {
- p.org[j] = move[j] + Lib.crand()*3;
- p.vel[j] = Lib.crand()*3;
- p.accel[j] = 0;
- }
-
- Math3D.VectorAdd (move, vec, move);
- active_particles.add(p);
- }
- }
-
- private void drawString(int x, int y, String text)
- {
- for (int i = 0; i < text.length(); i++)
- {
- re.DrawChar(x + 8 * i, y, (int) text.charAt(i));
- }
- }
-
- private final int time()
- {
- return (int) (System.currentTimeMillis() - startTime);
- }
-
- static xcommand_t togglemouse = new xcommand_t() {
- public void execute() {
- IN.toggleMouse();
- }
- };
-
- int r_numparticles = 0;
- /*
- =====================
- V_AddParticle
-
- =====================
- */
- void AddParticle(float[] org, int color, float alpha) {
- if (r_numparticles >= Defines.MAX_PARTICLES)
- return;
-
- int i = r_numparticles++;
-
- int c = particle_t.colorTable[color];
- c |= (int)(alpha * 255) << 24;
- particle_t.colorArray.put(i, c);
-
- i *= 3;
- FloatBuffer vertexBuf = particle_t.vertexArray;
- vertexBuf.put(i++, org[0]);
- vertexBuf.put(i++, org[1]);
- vertexBuf.put(i++, org[2]);
- }
-}
diff --git a/test/jake2/render/TestRenderer.java b/test/jake2/render/TestRenderer.java
deleted file mode 100644
index b138bac..0000000
--- a/test/jake2/render/TestRenderer.java
+++ /dev/null
@@ -1,754 +0,0 @@
-/*
- * TestRenderer.java
- * Copyright (C) 2003
- *
- * $Id: TestRenderer.java,v 1.6 2004-12-14 01:08:32 cawe Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.render;
-
-import jake2.Defines;
-import jake2.Globals;
-import jake2.client.*;
-import jake2.game.Cmd;
-import jake2.game.cvar_t;
-import jake2.qcommon.*;
-import jake2.sys.KBD;
-import jake2.util.*;
-
-import java.awt.Dimension;
-import java.nio.FloatBuffer;
-import java.util.*;
-
-/**
- * TestRenderer
- *
- * @author cwei
- */
-public class TestRenderer {
-
- String[] args;
-
- refexport_t re;
- viddef_t viddef;
- int framecount = 0;
- static int testnr = 0;
-
- public TestRenderer(String[] args) {
- this.args = args;
- }
-
- public static void main(String[] args) {
-
- TestRenderer test = new TestRenderer(args);
- test.init();
- test.run();
- }
-
- void init() {
-
- Qcommon.Init(new String[] {"TestRenderer"});
- // sehr wichtig !!!
- VID.Shutdown();
-
- String[] names = Renderer.getDriverNames();
- System.out.println("Registered Drivers: " + Arrays.asList(names));
-
- this.re = Renderer.getDriver("jogl");
-
- System.out.println("Use driver: " + re);
- System.out.println();
-
- re.Init(0, 0);
-
-// for (int i = 0; i < raw.length; i++) {
-// raw[i] = (byte)((i % 3) + 1); //((i % 4) + 20);
-// }
- Cmd.AddCommand("nexttest", nexttest);
- Cbuf.AddText("bind n nexttest");
- Cbuf.Execute();
- Globals.cls.key_dest = Defines.key_game;
- Globals.cls.state = Defines.ca_active;
- }
-
- float fps = 0.0f;
- long start = 0;
-
- void updateScreen() {
- re.BeginFrame(0.0f);
- viddef = Globals.viddef;
- re.DrawStretchPic(0,0,viddef.width, viddef.height, "conback");
-
- if (framecount % 500 == 0) {
- long time = System.currentTimeMillis();
- fps = 500000.0f / (time - start);
- start = time;
- }
- String text = fps + " fps";
-
- for (int i = 0; i < text.length(); i++) {
- re.DrawChar(10 + 8 * i, viddef.height/2, (int)text.charAt(i));
- }
-
- Dimension wal = new Dimension();
- re.DrawGetPicSize(wal, "/textures/e1u1/basemap.wal");
-
- re.DrawPic(0, viddef.height - wal.height, "/textures/e1u1/basemap.wal");
-
- switch (testnr) {
- case 0 :
- testParticles();
- break;
- case 1 :
- testModel();
- break;
- case 2 :
- testSprites();
- break;
- case 3:
- testBeam();
- }
- re.EndFrame();
- framecount++;
- }
-
-
- long startTime;
-
- void run() {
- startTime = System.currentTimeMillis();
- xcommand_t callback = new xcommand_t() {
- public void execute() {
- updateScreen();
- }
- };
- while (true) {
- re.updateScreen(callback);
- re.getKeyboardHandler().Update();
- Cbuf.Execute();
- try {
- Thread.sleep(5);
- } catch (InterruptedException e) {
- }
- }
- }
-
-// ===================================================================
-
- private int yaw = 0;
-
- private void testModel() {
-
- refdef_t refdef = new refdef_t();
-
- refdef.x = viddef.width/ 2;
- refdef.y = viddef.height / 2 - 72;
- refdef.width = 144 * 2;
- refdef.height = 168 * 2;
- refdef.fov_x = 40;
- refdef.fov_y = Math3D.CalcFov(refdef.fov_x, refdef.width, refdef.height);
- refdef.time = 1.0f * 0.001f;
-
- int maxframe = 29;
- entity_t entity = new entity_t();
- String modelName = "players/female/tris.md2";
-
- String modelSkin = "players/female/athena.pcx";
-
- String modelImage = "/players/female/athena_i.pcx";
- String modelImage1 = "/players/female/brianna_i.pcx";
- String modelImage2 = "/players/female/cobalt_i.pcx";
- String modelImage3 = "/players/female/lotus_i.pcx";
-
- entity.model = re.RegisterModel(modelName);
-
- drawString(refdef.x, refdef.y - 20, (entity.model != null) ? modelName : "DEBUG: NullModel");
-
- entity.skin = re.RegisterSkin(modelSkin);
- entity.flags = Defines.RF_FULLBRIGHT;
- entity.origin[0] = 80;
- entity.origin[1] = 0;
- entity.origin[2] = 0;
- Math3D.VectorCopy(entity.origin, entity.oldorigin);
- entity.frame = (framecount / 3) % ((qfiles.dmdl_t)entity.model.extradata).num_frames;
- entity.oldframe = 0;
- entity.backlerp = 0.0f;
- yaw+=KBD.mx;
- KBD.mx = 0;
- if (yaw > 360)
- yaw -= 360;
- if (yaw < 0)
- yaw += 360;
- entity.angles[1] = yaw;
-
-
- refdef.areabits = null;
- refdef.num_entities = 1;
- refdef.entities = new entity_t[] { entity };
- refdef.lightstyles = null;
- refdef.rdflags = Defines.RDF_NOWORLDMODEL;
-
- // Menu_Draw(& s_player_config_menu);
-
- M_DrawTextBox(
- (int) ((refdef.x) * (320.0F / viddef.width) - 8),
- (int) ((viddef.height / 2) * (240.0F / viddef.height) - 77),
- refdef.width / 8,
- refdef.height / 8);
- refdef.height += 4;
-
- re.RenderFrame(refdef);
-
- re.DrawPic(refdef.x - 80, refdef.y, modelImage);
- re.DrawPic(refdef.x - 80, refdef.y + 47, modelImage1);
- re.DrawPic(refdef.x - 80, refdef.y + 94, modelImage2);
- re.DrawPic(refdef.x - 80, refdef.y + 141, modelImage3);
- }
-
-
- private String[] sprites = {
- "sprites/s_bfg1.sp2",
- "sprites/s_bfg2.sp2",
- "sprites/s_bfg3.sp2",
- "sprites/s_explod.sp2",
- "sprites/s_explo2.sp2",
- "sprites/s_explo3.sp2",
- "sprites/s_flash.sp2",
- "sprites/s_bubble.sp2",
- };
-
- private int spriteCount = 0;
- private boolean loading = true;
-
- private void testSprites() {
-
- if (loading) {
-
- re.DrawPic(viddef.width / 2 - 50, viddef.height / 2, "loading");
- String name = sprites[spriteCount];
-
- drawString(viddef.width / 2 - 50, viddef.height / 2 + 50, name);
-
- re.RegisterModel(name);
- loading = ++spriteCount < sprites.length;
- return;
- }
-
-
- refdef_t refdef = new refdef_t();
-
- refdef.x = viddef.width/ 2;
- refdef.y = viddef.height / 2 - 72;
- refdef.width = 144 * 2;
- refdef.height = 168 * 2;
- refdef.fov_x = 40;
- refdef.fov_y = Math3D.CalcFov(refdef.fov_x, refdef.width, refdef.height);
- refdef.time = 1.0f * 0.001f;
-
- int maxframe = 29;
- entity_t entity = new entity_t();
-
- String modelName = sprites[(framecount / 30) % sprites.length];
- drawString(refdef.x, refdef.y - 20, modelName);
-
- entity.model = re.RegisterModel(modelName);
-
- entity.flags = Defines.RF_FULLBRIGHT;
- entity.origin[0] = 80 - (framecount % 200) + 200;
- entity.origin[1] = 0 + (float)(40 * Math.sin(Math.toRadians(framecount)));
- entity.origin[2] = 0 + 20;
- Math3D.VectorCopy(entity.origin, entity.oldorigin);
- entity.frame = framecount / 2;
- entity.oldframe = 0;
- entity.backlerp = 0.0f;
-
- refdef.areabits = null;
- refdef.num_entities = 1;
- refdef.entities = new entity_t[] { entity };
- refdef.lightstyles = null;
- refdef.rdflags = Defines.RDF_NOWORLDMODEL;
-
- M_DrawTextBox(
- (int) ((refdef.x) * (320.0F / viddef.width) - 8),
- (int) ((viddef.height / 2) * (240.0F / viddef.height) - 77),
- refdef.width / 8,
- refdef.height / 8);
- refdef.height += 4;
-
- re.RenderFrame(refdef);
-
- }
-
- private void testBeam() {
-
- refdef_t refdef = new refdef_t();
-
- refdef.x = viddef.width/ 2;
- refdef.y = viddef.height / 2 - 72;
- refdef.width = 144 * 2;
- refdef.height = 168 * 2;
- refdef.fov_x = 40;
- refdef.fov_y = Math3D.CalcFov(refdef.fov_x, refdef.width, refdef.height);
- refdef.time = 1.0f * 0.001f;
-
- int maxframe = 29;
- entity_t entity = new entity_t();
-
- drawString(refdef.x, refdef.y - 20, "Beam Test");
-
- entity.flags = Defines.RF_BEAM;
- entity.origin[0] = 200;
- entity.origin[1] = 0 + (float)(80 * Math.sin(4 * Math.toRadians(framecount)));
- entity.origin[2] = 20 + (float)(40 * Math.cos(4 * Math.toRadians(framecount)));
-
- entity.oldorigin[0] = 20;
- entity.oldorigin[1] = 0; // + (float)(40 * Math.sin(Math.toRadians(framecount)));
- entity.oldorigin[2] = -20; // + 20;
-
- entity.frame = 3;
- entity.oldframe = 0;
- entity.backlerp = 0.0f;
- // the four beam colors are encoded in 32 bits of skinnum (hack)
- entity.alpha = 0.6f;
-
- int[] color = { 0xd0, 0xd1, 0xe0, 0xb0 };
-
- entity.skinnum = color[framecount / 2 % 4];
- entity.model = null;
-
- refdef.areabits = null;
- refdef.num_entities = 1;
- refdef.entities = new entity_t[] { entity };
- refdef.lightstyles = null;
- refdef.rdflags = Defines.RDF_NOWORLDMODEL;
-
- M_DrawTextBox(
- (int) ((refdef.x) * (320.0F / viddef.width) - 8),
- (int) ((viddef.height / 2) * (240.0F / viddef.height) - 77),
- refdef.width / 8,
- refdef.height / 8);
- refdef.height += 4;
-
- re.RenderFrame(refdef);
- }
-
- private LinkedList active_particles = new LinkedList();
- private boolean explode = false;
- private float[] target;
-
- private boolean initParticles = true;
-
- private void testParticles() {
-
- r_numparticles = 0;
-
- if (active_particles.size() == 0) {
- if (explode)
- Explosion(target);
- else {
- target = new float[] {150 + Lib.crand() * 80, Lib.crand() * 40, Lib.crand() * 40};
- RailTrail(new float[]{30, -20, -20}, target);
- //Heatbeam(new float[]{30, 20, -20}, target);
- }
- explode = !explode;
- }
- refdef_t refdef = new refdef_t();
-
- refdef.x = viddef.width/ 2;
- refdef.y = viddef.height / 2 - 72;
- refdef.width = 400;
- refdef.height = 400;
- refdef.fov_x = 50;
- refdef.fov_y = Math3D.CalcFov(refdef.fov_x, refdef.width, refdef.height);
- refdef.time = 1.0f * 0.001f;
-
- animateParticles();
-
- drawString(refdef.x, refdef.y - 20, "active particles: " + r_numparticles);
-
- refdef.num_particles = r_numparticles;
-
- refdef.areabits = null;
- refdef.num_entities = 0;
- refdef.entities = null;
- refdef.lightstyles = null;
- refdef.rdflags = Defines.RDF_NOWORLDMODEL;
-
- M_DrawTextBox(
- (int) ((refdef.x) * (320.0F / viddef.width) - 8),
- (int) ((viddef.height / 2) * (240.0F / viddef.height) - 77),
- refdef.width / 8,
- refdef.height / 8);
- refdef.height += 4;
-
- re.RenderFrame(refdef);
- }
-
- private void drawString(int x, int y, String text) {
- for (int i = 0; i < text.length(); i++) {
- re.DrawChar(x + 8 * i, y, (int)text.charAt(i));
- }
- }
-
-
- private void M_DrawTextBox(int x, int y, int width, int lines) {
- int cx, cy;
- int n;
-
- // draw left side
- cx = x;
- cy = y;
- M_DrawCharacter(cx, cy, 1);
- for (n = 0; n < lines; n++) {
- cy += 8;
- M_DrawCharacter(cx, cy, 4);
- }
- M_DrawCharacter(cx, cy + 8, 7);
-
- // draw middle
- cx += 8;
- while (width > 0) {
- cy = y;
- M_DrawCharacter(cx, cy, 2);
- for (n = 0; n < lines; n++) {
- cy += 8;
- M_DrawCharacter(cx, cy, 5);
- }
- M_DrawCharacter(cx, cy + 8, 8);
- width -= 1;
- cx += 8;
- }
-
- // draw right side
- cy = y;
- M_DrawCharacter(cx, cy, 3);
- for (n = 0; n < lines; n++) {
- cy += 8;
- M_DrawCharacter(cx, cy, 6);
- }
- M_DrawCharacter(cx, cy + 8, 9);
- }
-
- /*
- ================
- M_DrawCharacter
-
- Draws one solid graphics character
- cx and cy are in 320*240 coordinates, and will be centered on
- higher res screens.
- ================
- */
- private void M_DrawCharacter(int cx, int cy, int num) {
- re.DrawChar(
- cx + ((viddef.width - 320) >> 1),
- cy + ((viddef.height - 240) >> 1),
- num);
- }
-
- long endtime;
-
- private void Explosion(float[] org) {
- float[] dir = {0, 0, 0};
- int i;
- cparticle_t p;
-
- for(i=0; i<256; i++)
- {
- p = new cparticle_t();
-
- p.time = time() * 1.0f;
- p.color = /*0xe0*/ 223 - (Lib.rand() & 7);
- for (int j=0 ; j<3 ; j++)
- {
- p.org[j] = org[j] + (float)(Lib.rand() % 32) - 16;
- p.vel[j] = (float)(Lib.rand() % 384) - 192;
- }
-
- p.accel[0] = p.accel[1] = 0;
- p.accel[2] = -PARTICLE_GRAVITY;
- p.alpha = 1.0f;
- p.alphavel = -0.8f / (0.5f + Globals.rnd.nextFloat() * 0.3f);
-
- active_particles.add(p);
- }
- }
-
- static final float INSTANT_PARTICLE = -10000.0f;
- static final float PARTICLE_GRAVITY = 40.0f;
-
-
- /*
- ===============
- CL_AddParticles
- ===============
- */
- private void animateParticles()
- {
- cparticle_t p;
- float alpha;
- float time, time2;
- float[] org = {0, 0, 0};
- int color;
-
- time = 0.0f;
-
- for (Iterator it = active_particles.iterator(); it.hasNext();)
- {
- p = (cparticle_t) it.next();
-
- // PMM - added INSTANT_PARTICLE handling for heat beam
- if (p.alphavel != INSTANT_PARTICLE)
- {
- time = (time() - p.time) * 0.001f;
- alpha = p.alpha + time*p.alphavel;
- if (alpha <= 0)
- { // faded out
- it.remove();
- continue;
- }
- }
- else
- {
- alpha = p.alpha;
- }
-
- if (alpha > 1.0)
- alpha = 1;
- color = (int)p.color;
-
- time2 = time*time;
-
- org[0] = p.org[0] + p.vel[0]*time + p.accel[0]*time2;
- org[1] = p.org[1] + p.vel[1]*time + p.accel[1]*time2;
- org[2] = p.org[2] + p.vel[2]*time + p.accel[2]*time2;
-
- AddParticle(org, color, alpha);
-
- // PMM
- if (p.alphavel == INSTANT_PARTICLE)
- {
- p.alphavel = 0.0f;
- p.alpha = 0.0f;
- }
- }
- }
-
- private void Heatbeam (float[] start, float[] forward)
- {
-
- float[] v_up = {0, 0, 10};
- float[] v_right = {0, 10, 0};
-
-
- float[] move = {0, 0, 0};
- float[] vec = {0, 0, 0};
- float len;
- int j;
- cparticle_t p;
- float[] right = {0, 0, 0};
- float[] up = {0, 0, 0};
- int i;
- float c, s;
- float[] dir = {0, 0, 0};
- float ltime;
- float step = 32.0f, rstep;
- float start_pt;
- float rot;
- float variance;
- float[] end = {0, 0, 0};
-
- Math3D.VectorMA (start, 4096, forward, end);
-
- Math3D.VectorCopy (start, move);
- Math3D.VectorSubtract (end, start, vec);
- len = Math3D.VectorNormalize (vec);
-
- Math3D.VectorCopy (v_right, right);
- Math3D.VectorCopy (v_up, up);
-// if (vidref_val == VIDREF_GL)
-// { // GL mode
- Math3D.VectorMA (move, -0.5f, right, move);
- Math3D.VectorMA (move, -0.5f, up, move);
-// }
-// // otherwise assume SOFT
-
- ltime = (float)time()/1000.0f;
- start_pt = (ltime*96.0f) % step;
- Math3D.VectorMA (move, start_pt, vec, move);
-
- Math3D.VectorScale (vec, step, vec);
-
- rstep = (float)Math.PI / 10.0f;
- for (i=(int)start_pt ; i<len ; i+=step)
- {
- if (i>step*5) // don't bother after the 5th ring
- break;
-
- for (rot = 0; rot < Math.PI * 2; rot += rstep)
- {
-
- p = new cparticle_t();
-
- p.time = time();
- Math3D.VectorClear (p.accel);
- variance = 0.5f;
- c = (float)Math.cos(rot)*variance;
- s = (float)Math.sin(rot)*variance;
-
- // trim it so it looks like it's starting at the origin
- if (i < 10)
- {
- Math3D.VectorScale (right, c*(i/10.0f), dir);
- Math3D.VectorMA (dir, s*(i/10.0f), up, dir);
- }
- else
- {
- Math3D.VectorScale (right, c, dir);
- Math3D.VectorMA (dir, s, up, dir);
- }
-
- p.alpha = 0.8f;
- p.alphavel = -1000.0f;
- p.color = /* 223 */0x74 - (Lib.rand()&7);
- for (j=0 ; j<3 ; j++)
- {
- p.org[j] = move[j] + dir[j]*3;
- p.vel[j] = 0;
- }
-
- active_particles.add(p);
- }
- Math3D.VectorAdd (move, vec, move);
- }
- }
-
- private void RailTrail(float[] start, float[] end)
- {
- float[] move = {0, 0, 0};
- float[] vec = {0, 0, 0};
- float len;
- int j;
- cparticle_t p;
- float dec;
- float[] right = {0, 0, 0};
- float[] up = {0, 0, 0};
- int i;
- float d, c, s;
- float[] dir = {0, 0, 0};
-
- Math3D.VectorCopy (start, move);
- Math3D.VectorSubtract (end, start, vec);
- len = Math3D.VectorNormalize(vec);
-
- Math3D.MakeNormalVectors(vec, right, up);
-
- for (i=0 ; i<len ; i++)
- {
-
- p = new cparticle_t();
- p.time = time();
- Math3D.VectorClear (p.accel);
-
- d = i * 0.1f;
- c = (float)Math.cos(d);
- s = (float)Math.sin(d);
-
- Math3D.VectorScale (right, c, dir);
- Math3D.VectorMA (dir, s, up, dir);
-
- p.alpha = 1.0f;
- p.alphavel = -1.0f / (1 + Globals.rnd.nextFloat() * 0.2f);
- p.color = 0x74 + (Lib.rand() & 7);
- for (j=0 ; j<3 ; j++)
- {
- p.org[j] = move[j] + dir[j]*3;
- p.vel[j] = dir[j]*6;
- }
-
- Math3D.VectorAdd (move, vec, move);
-
- active_particles.add(p);
- }
-
- dec = 0.75f;
- Math3D.VectorScale (vec, dec, vec);
- Math3D.VectorCopy (start, move);
-
- while (len > 0)
- {
- len -= dec;
-
- p = new cparticle_t();
-
- p.time = time();
- Math3D.VectorClear (p.accel);
-
- p.alpha = 1.0f;
- p.alphavel = -1.0f / (0.6f + Globals.rnd.nextFloat() * 0.2f);
- p.color = 0x0 + Lib.rand()&15;
-
- for (j=0 ; j<3 ; j++)
- {
- p.org[j] = move[j] + Lib.crand()*3;
- p.vel[j] = Lib.crand()*3;
- p.accel[j] = 0;
- }
-
- Math3D.VectorAdd (move, vec, move);
- active_particles.add(p);
- }
- }
-
- private int time() {
- return (int)(System.currentTimeMillis() - startTime);
- }
-
- static xcommand_t nexttest = new xcommand_t() {
- public void execute() {
- testnr++;
- testnr = testnr % 3;
- }
- };
-
- int r_numparticles = 0;
- /*
- =====================
- V_AddParticle
-
- =====================
- */
- void AddParticle(float[] org, int color, float alpha) {
- if (r_numparticles >= Defines.MAX_PARTICLES)
- return;
-
- int i = r_numparticles++;
-
- int c = particle_t.colorTable[color];
- c |= (int)(alpha * 255) << 24;
- particle_t.colorArray.put(i, c);
-
- i *= 3;
- FloatBuffer vertexBuf = particle_t.vertexArray;
- vertexBuf.put(i++, org[0]);
- vertexBuf.put(i++, org[1]);
- vertexBuf.put(i++, org[2]);
- }
-}