Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
21.10.2001, 23:37
MK



hi, ich habe das Headcrab etwas bearbeitet und ihm ein neues Model gegeben.
Geht auch alles wunderbar nur wenn mich das vieh anspringt verletzt es mich nicht.Das Model (Wolf) ist grösser als
das vom Headcrab. Ich hatte schon mal das problem als ich ein zweites bullchicken mit
einem grösseren model gemacht habe. Da habe ich dann nur die reichweite seiner Angriffe
vergrössert , und zwar damit :
CBaseEntity *pHurt = CheckTraceHullAttack( 70, gSkillData.bullsquid2DmgBite, DMG_SLASH );
Leider kann ich beim Headcrab nichts finden was vergleichbar währe nur:
if ( FBitSet( pev->flags, FL_ONGROUND ) && flDist <= 256 && flDot >= 0.65 )
Aber als ich das änderte war kein unterschied fest zu stellen.
Wie kann ich den Radius des Headcrab angriffs erhöhen.
Schon mal thx.

--

zum Seitenanfang zum Seitenende Profil || Suche
001
22.10.2001, 00:05
Hanfling



poste mal die *.qc datei von model

[EDIT]
das mit der reichweite kannst du nur über die anis vom model machen
[/EDIT]

--

Nun ist deine Zeit gekommen sprach der Tod, stolperte und brach sich das Genick. :o


Dieser Beitrag wurde am 22.10.2001 um 00:07 von Hanfling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
22.10.2001, 01:20
MK



Hier ist sie :

$modelname "C:\Games\Half-Life\MK_Revil\Models\wolf.mdl"
$cd "\Games\Half-Life\MK_Revil\Models\"
$cdtexture "\Games\Half-Life\MK_Revil\Models\"
$cliptotextures

$scale 1.0

// 1 attachments
$attachment 0 "Box02" -10.000000 0.000000 0.000000

// 0 bone controllers

// 35 hit boxes
$hbox 0 "Bip01 Pelvis" -2.760000 -5.700000 -9.960000 4.690000 3.990000 9.960000
$hbox 0 "Bip01 Spine" 0.000000 -2.020000 -7.470000 12.579257 6.840000 7.470000
$hbox 0 "Bip01 Spine1" -1.090000 -3.110000 -7.030000 6.524157 3.070000 7.030000
$hbox 0 "Bip01 Spine2" -5.970000 -0.003364 -8.180000 6.183024 16.209999 8.180000
$hbox 0 "Bip01 Neck" -2.070000 -2.690000 -6.760000 4.190000 16.400000 6.760000
$hbox 0 "Bip01 Neck1" 0.000000 -0.002390 -7.030000 4.260000 10.300000 7.030000
$hbox 0 "Bip01 Neck2" 0.000000 -4.020000 -3.470000 3.001310 0.000002 3.470000
$hbox 0 "Bip01 Head" -2.050000 -5.010000 -6.310000 6.800000 3.780657 6.310000
$hbox 0 "Box02" -6.640000 -1.300000 -3.100000 0.000000 0.280000 3.480000
$hbox 0 "Box01" -8.280000 -2.090000 -3.190000 0.000000 2.070000 3.570000
$hbox 0 "Box04" -2.040000 -0.420000 -0.390000 2.160000 5.530000 0.940000
$hbox 0 "Box03" -2.290000 -0.420000 -0.390000 1.900000 5.530000 0.940000
$hbox 0 "Bip01 L Clavicle" 0.000000 0.000000 -3.480000 15.934477 6.850000 4.840000
$hbox 0 "Bip01 L UpperArm" -0.160000 -3.170000 -2.840000 10.470000 2.920000 2.840000
$hbox 0 "Bip01 L Forearm" 0.000000 -2.060000 -1.970000 11.532939 0.000001 0.000000
$hbox 0 "Bip01 L Hand" -1.240000 -2.780000 -1.020000 3.834996 3.080000 1.310000
$hbox 0 "Bip01 L Finger0" 0.000000 -1.280000 0.000000 1.070000 1.380000 1.040000
$hbox 0 "Bip01 R Clavicle" 0.000000 -0.000001 -4.840000 15.934477 6.850000 3.480000
$hbox 0 "Bip01 R UpperArm" -0.160000 -3.170000 -2.840000 10.480000 2.920000 2.840000
$hbox 0 "Bip01 R Forearm" 0.000000 -2.060000 0.000000 11.532939 0.000000 1.990000
$hbox 0 "Bip01 R Hand" -1.230000 -2.830000 -1.310000 3.834997 3.030000 1.020000
$hbox 0 "Bip01 R Finger0" 0.000000 -1.320000 -1.040000 1.080000 1.330000 0.000000
$hbox 0 "Bip01 L Thigh" 0.000000 -5.390000 -5.170000 16.750000 4.140000 5.280000
$hbox 0 "Bip01 L Calf" 0.000000 -0.810000 -3.300000 10.250373 2.190000 1.900000
$hbox 0 "Bip01 L HorseLink" -0.570000 -1.040000 -3.050000 10.627591 2.380000 2.370000
$hbox 0 "Bip01 L Foot" 0.000000 -1.530000 -2.390000 3.320000 4.756175 3.470000
$hbox 0 "Bip01 R Thigh" 0.000000 -5.200000 -5.230000 16.670000 4.490000 5.180000
$hbox 0 "Bip01 R Calf" 0.000000 -1.140000 -2.180000 10.730000 2.200000 3.450000
$hbox 0 "Bip01 R HorseLink" 0.000000 -0.000001 0.000000 10.627589 2.590000 3.230000
$hbox 0 "Bip01 R Foot" 0.000000 -1.530000 -3.220000 3.196727 4.756174 2.640000
$hbox 0 "Bip01 Tail" 0.000000 -0.002922 -3.020000 4.262426 2.420000 3.020000
$hbox 0 "Bip01 Tail1" 0.000000 -1.510000 -3.020000 4.263362 1.730000 3.020000
$hbox 0 "Bip01 Tail2" 0.000000 -2.520000 -3.730000 4.263943 1.970000 3.730000
$hbox 0 "Bip01 Tail3" 0.000000 -2.960000 -4.800000 4.265891 2.690000 4.800000
$hbox 0 "Bip01 Tail4" -0.140000 -3.910000 -4.090000 7.110000 2.240000 4.090000

$bodygroup body
{
studio "ref"
}

// 17 sequences
$sequence run "run" LX loop fps 45 ACT_RUN 1
$sequence sit_idle1 "sit_idle1" loop fps 14 ACT_CROUCHIDLE 1
$sequence sit_idle2 "sit_idle2" fps 14 ACT_CROUCHIDLE 1
$sequence howl "howl" fps 20 ACT_CROUCHIDLE 1
$sequence standup "standup" fps 10 ACT_STAND 1
$sequence standidle1 "standidle1" loop fps 14 ACT_IDLE 1
$sequence standidle2 "standidle2" fps 14 ACT_IDLE 2
$sequence eat "eat" fps 18 ACT_EAT 1
$sequence die1 "die1" fps 14 ACT_DIESIMPLE 1
$sequence die2 "die2" fps 14 ACT_DIESIMPLE 1
$sequence attack1 "attack1" fps 22 ACT_MELEE_ATTACK1 1 { event 2 14 }
$sequence attack2 "attack2" LX fps 22 ACT_MELEE_ATTACK1 1 { event 2 13 }
$sequence pain1 "pain1" fps 22 ACT_SMALL_FLINCH 1
$sequence pain2 "pain2" LX fps 22 ACT_SMALL_FLINCH 1
$sequence guard "guard" fps 18 ACT_GUARD 1
$sequence threat "threat" fps 18 ACT_IDLE_ANGRY 1
$sequence hopback "hopback" LX fps 40 ACT_LEAP 1 { event 1 13 }

--

zum Seitenanfang zum Seitenende Profil || Suche
003
22.10.2001, 01:53
Hanfling



ok der nimmt kein schaden?
ok dann nimmt der das event wahrscheinlich nicht entgegen, mal von vorne wie die gesendet/aufgefangen werden

{ event 2 14 }
diese event gibt den befehl das event nr. 2 zu bei frame 14 der animation ausgeführt wird

dann fängst du das im code ab:

#define WOLF_AE_JUMPATTACK 2

am anfang der datei
event 2 wird dadurch WOLF_AE_JUMPATTACK zugewiesen.

dann fängst du das wiederum ab und sagst was der bei dem event machen soll:

void CWolf :: HandleAnimEvent( MonsterEvent_t *pEvent )
{
switch( pEvent->event )
{
case WOLF_AE_JUMPATTACK:
was dann passieren soll
break;
default:
CBaseMonster::HandleAnimEvent( pEvent );
break;
}

}

vieleicht hast du das nicht richtig abgefangen oder so...

poste vieleicht dann auch noch den code der "CWolf :: HandleAnimEvent"

--

Nun ist deine Zeit gekommen sprach der Tod, stolperte und brach sich das Genick. :o

zum Seitenanfang zum Seitenende Profil || Suche
004
22.10.2001, 19:24
MK



Danke schon mal für die Antwort. Also das Model ist nicht von mir ,ich kenne mich
damit nicht aus. Das hat ein Kumpel mal gemacht. Auch in monster coding habe ich noch
nicht viel erfahrung darum habe ich für mein erstes Monster das Headcrab kopiert
und geändert. Ich habe die Animationen deshalb erst mal so gelassen und es geht auch.
Das vieh läuft auf mich zu und springt mich an. Ich kann es auch töten aber der
Wolf mich nicht. Egal wie oft der mich anspringt ich verliere keine Energie.

Ich habe hier mal den Code :

//=========================================================
// headcrab2.cpp - NEU1 = WOLF Monster
//=========================================================

#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "schedule.h"

//=========================================================
// Monster's Anim Events Go Here
//=========================================================
#define HC_AE_JUMPATTACK ( 2 )

Task_t tlHCRangeAttack12[] =
{
{ TASK_STOP_MOVING, (float)0 },
{ TASK_FACE_IDEAL, (float)0 },
{ TASK_RANGE_ATTACK1, (float)0 },
{ TASK_SET_ACTIVITY, (float)ACT_IDLE },
{ TASK_FACE_IDEAL, (float)0 },
{ TASK_WAIT_RANDOM, (float)0.5 },
};

Schedule_t slHCRangeAttack12[] =
{
{
tlHCRangeAttack12,
ARRAYSIZE ( tlHCRangeAttack12 ),
bits_COND_ENEMY_OCCLUDED |
bits_COND_NO_AMMO_LOADED,
0,
"HCRangeAttack1"
},
};

Task_t tlHCRangeAttack1Fast2[] =
{
{ TASK_STOP_MOVING, (float)0 },
{ TASK_FACE_IDEAL, (float)0 },
{ TASK_RANGE_ATTACK1, (float)0 },
{ TASK_SET_ACTIVITY, (float)ACT_IDLE },
};

Schedule_t slHCRangeAttack1Fast2[] =
{
{
tlHCRangeAttack1Fast2,
ARRAYSIZE ( tlHCRangeAttack1Fast2 ),
bits_COND_ENEMY_OCCLUDED |
bits_COND_NO_AMMO_LOADED,
0,
"HCRAFast"
},
};

class CHeadCrab2 : public CBaseMonster
{
public:
void Spawn( void );
void Precache( void );
void RunTask ( Task_t *pTask );
void StartTask ( Task_t *pTask );
void SetYawSpeed ( void );
void EXPORT LeapTouch ( CBaseEntity *pOther );
Vector Center( void );
Vector BodyTarget( const Vector &posSrc );
void PainSound( void );
void DeathSound( void );
void IdleSound( void );
void AlertSound( void );
void PrescheduleThink( void );
int Classify ( void );
void HandleAnimEvent( MonsterEvent_t *pEvent );
BOOL CheckRangeAttack1 ( float flDot, float flDist );
BOOL CheckRangeAttack2 ( float flDot, float flDist );
int TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType );

virtual float GetDamageAmount( void ) { return gSkillData.headcrab2DmgBite; }
virtual int GetVoicePitch( void ) { return 100; }
virtual float GetSoundVolue( void ) { return 1.0; }
Schedule_t* GetScheduleOfType ( int Type );

CUSTOM_SCHEDULES;

static const char *pIdleSounds[];
static const char *pAlertSounds[];
static const char *pPainSounds[];
static const char *pAttackSounds[];
static const char *pDeathSounds[];
static const char *pBiteSounds[];
};
LINK_ENTITY_TO_CLASS( monster_wolf, CHeadCrab2 );

DEFINE_CUSTOM_SCHEDULES( CHeadCrab2 )
{
slHCRangeAttack12,
slHCRangeAttack1Fast2,
};

IMPLEMENT_CUSTOM_SCHEDULES( CHeadCrab2, CBaseMonster );

const char *CHeadCrab2::pIdleSounds[] =
{
"headcrab/hc_idle1.wav",
"headcrab/hc_idle2.wav",
"headcrab/hc_idle3.wav",
};
const char *CHeadCrab2::pAlertSounds[] =
{
"headcrab/hc_alert1.wav",
};
const char *CHeadCrab2::pPainSounds[] =
{
"headcrab/hc_pain1.wav",
"headcrab/hc_pain2.wav",
"headcrab/hc_pain3.wav",
};
const char *CHeadCrab2::pAttackSounds[] =
{
"headcrab/hc_attack1.wav",
"headcrab/hc_attack2.wav",
"headcrab/hc_attack3.wav",
};

const char *CHeadCrab2::pDeathSounds[] =
{
"headcrab/hc_die1.wav",
"headcrab/hc_die2.wav",
};

const char *CHeadCrab2::pBiteSounds[] =
{
"headcrab/hc_headbite.wav",
};

//=========================================================
// Classify - indicates this monster's place in the
// relationship table.
//=========================================================
int CHeadCrab2 :: Classify ( void )
{
return CLASS_ALIEN_PREY;
}

//=========================================================
// Center - returns the real center of the headcrab. The
// bounding box is much larger than the actual creature so
// this is needed for targeting
//=========================================================
Vector CHeadCrab2 :: Center ( void )
{
return Vector( pev->origin.x, pev->origin.y, pev->origin.z + 6 );
}

Vector CHeadCrab2 :: BodyTarget( const Vector &posSrc )
{
return Center( );
}

//=========================================================
// SetYawSpeed - allows each sequence to have a different
// turn rate associated with it.
//=========================================================
void CHeadCrab2 :: SetYawSpeed ( void )
{
int ys;

switch ( m_Activity )
{
case ACT_IDLE:
ys = 30;
break;
case ACT_RUN:
case ACT_WALK:
ys = 20;
break;
case ACT_TURN_LEFT:
case ACT_TURN_RIGHT:
ys = 60;
break;
case ACT_RANGE_ATTACK1:
ys = 30;
break;
default:
ys = 30;
break;
}

pev->yaw_speed = ys;
}

//=========================================================
// HandleAnimEvent - catches the monster-specific messages
// that occur when tagged animation frames are played.
//=========================================================
void CHeadCrab2 :: HandleAnimEvent( MonsterEvent_t *pEvent )
{
switch( pEvent->event )
{
case HC_AE_JUMPATTACK:
{
ClearBits( pev->flags, FL_ONGROUND );

UTIL_SetOrigin (pev, pev->origin + Vector ( 0 , 0 , 1) );// take him off ground so engine doesn't instantly reset onground
UTIL_MakeVectors ( pev->angles );

Vector vecJumpDir;
if (m_hEnemy != NULL)
{
float gravity = CVAR_GET_FLOAT( "sv_gravity" );
if (gravity <= 1)
gravity = 1;

// How fast does the headcrab need to travel to reach that height given gravity?
float height = (m_hEnemy->pev->origin.z + m_hEnemy->pev->view_ofs.z - pev->origin.z);
if (height < 16)
height = 16;
float speed = sqrt( 2 * gravity * height );
float time = speed / gravity;

// Scale the sideways velocity to get there at the right time
vecJumpDir = (m_hEnemy->pev->origin + m_hEnemy->pev->view_ofs - pev->origin);
vecJumpDir = vecJumpDir * ( 1.0 / time );

// Speed to offset gravity at the desired height
vecJumpDir.z = speed;

// Don't jump too far/fast
float distance = vecJumpDir.Length();

if (distance > 650)
{
vecJumpDir = vecJumpDir * ( 650.0 / distance );
}
}
else
{
// jump hop, don't care where
vecJumpDir = Vector( gpGlobals->v_forward.x, gpGlobals->v_forward.y, gpGlobals->v_up.z ) * 350;
}

int iSound = RANDOM_LONG(0,2);
if ( iSound != 0 )
EMIT_SOUND_DYN( edict(), CHAN_VOICE, pAttackSounds[iSound], GetSoundVolue(), ATTN_IDLE, 0, GetVoicePitch() );

pev->velocity = vecJumpDir;
m_flNextAttack = gpGlobals->time + 2;
}
break;

default:
CBaseMonster::HandleAnimEvent( pEvent );
break;
}
}

//=========================================================
// Spawn
//=========================================================
void CHeadCrab2 :: Spawn()
{
Precache( );

SET_MODEL(ENT(pev), "models/wolf.mdl");
// UTIL_SetSize(pev, Vector(-12, -12, 0), Vector(12, 12, 24)); // Alt
UTIL_SetSize( pev, Vector( -32, -32, 0 ), Vector( 32, 32, 64 ) );

pev->solid = SOLID_SLIDEBOX;
pev->movetype = MOVETYPE_STEP;
m_bloodColor = BLOOD_COLOR_RED;
pev->effects = 0;
pev->health = gSkillData.headcrab2Health;
pev->view_ofs = Vector ( 0, 0, 20 );// position of the eyes relative to monster's origin.
pev->yaw_speed = 5;//!!! should we put this in the monster's changeanim function since turn rates may vary with state/anim?
m_flFieldOfView = 0.5;// indicates the width of this monster's forward view cone ( as a dotproduct result )
m_MonsterState = MONSTERSTATE_NONE;

MonsterInit();
}

//=========================================================
// Precache - precaches all resources this monster needs
//=========================================================
void CHeadCrab2 :: Precache()
{
PRECACHE_SOUND_ARRAY(pIdleSounds);
PRECACHE_SOUND_ARRAY(pAlertSounds);
PRECACHE_SOUND_ARRAY(pPainSounds);
PRECACHE_SOUND_ARRAY(pAttackSounds);
PRECACHE_SOUND_ARRAY(pDeathSounds);
PRECACHE_SOUND_ARRAY(pBiteSounds);

PRECACHE_MODEL("models/wolf.mdl");
}

//=========================================================
// RunTask
//=========================================================
void CHeadCrab2 :: RunTask ( Task_t *pTask )
{
switch ( pTask->iTask )
{
case TASK_RANGE_ATTACK1:
case TASK_RANGE_ATTACK2:
{
if ( m_fSequenceFinished )
{
TaskComplete();
SetTouch( NULL );
m_IdealActivity = ACT_IDLE;
}
break;
}
default:
{
CBaseMonster :: RunTask(pTask);
}
}
}

//=========================================================
// LeapTouch - this is the headcrab's touch function when it
// is in the air
//=========================================================
void CHeadCrab2 :: LeapTouch ( CBaseEntity *pOther )
{
if ( !pOther->pev->takedamage )
{
return;
}

if ( pOther->Classify() == Classify() )
{
return;
}

// Don't hit if back on ground
if ( !FBitSet( pev->flags, FL_ONGROUND ) )
{
EMIT_SOUND_DYN( edict(), CHAN_WEAPON, RANDOM_SOUND_ARRAY(pBiteSounds), GetSoundVolue(), ATTN_IDLE, 0, GetVoicePitch() );

pOther->TakeDamage( pev, pev, GetDamageAmount(), DMG_SLASH ); //pev, pev,
}

SetTouch( NULL );
}

//=========================================================
// PrescheduleThink
//=========================================================
void CHeadCrab2 :: PrescheduleThink ( void )
{
// make the crab coo a little bit in combat state
if ( m_MonsterState == MONSTERSTATE_COMBAT && RANDOM_FLOAT( 0, 5 ) < 0.1 )
{
IdleSound();
}
}

void CHeadCrab2 :: StartTask ( Task_t *pTask )
{
m_iTaskStatus = TASKSTATUS_RUNNING;

switch ( pTask->iTask )
{
case TASK_RANGE_ATTACK1:
{
EMIT_SOUND_DYN( edict(), CHAN_WEAPON, pAttackSounds[0], GetSoundVolue(), ATTN_IDLE, 0, GetVoicePitch() );
m_IdealActivity = ACT_RANGE_ATTACK1;
SetTouch ( LeapTouch );
break;
}
default:
{
CBaseMonster :: StartTask( pTask );
}
}
}

//=========================================================
// CheckRangeAttack1
//=========================================================
BOOL CHeadCrab2 :: CheckRangeAttack1 ( float flDot, float flDist )
{
if ( FBitSet( pev->flags, FL_ONGROUND ) && flDist <= 256 && flDot >= 0.65 ) // 256 && flDot >= 0.65
{
return TRUE;
}
return FALSE;
}

//=========================================================
// CheckRangeAttack2
//=========================================================
BOOL CHeadCrab2 :: CheckRangeAttack2 ( float flDot, float flDist )
{
return FALSE;
// BUGBUG: Why is this code here? There is no ACT_RANGE_ATTACK2 animation. I've disabled it for now.
#if 0
if ( FBitSet( pev->flags, FL_ONGROUND ) && flDist > 64 && flDist <= 85 && flDot >= 0.7 ) // 256 && flDot >= 0.5
{
return TRUE;
}
return FALSE;
#endif
}

int CHeadCrab2 :: TakeDamage( entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType )
{
// Don't take any acid damage -- BigMomma's mortar is acid
if ( bitsDamageType & DMG_ACID )
flDamage = 0;

return CBaseMonster::TakeDamage( pevInflictor, pevAttacker, flDamage, bitsDamageType );
}

//=========================================================
// IdleSound
//=========================================================
#define CRAB_ATTN_IDLE (float)1.5
void CHeadCrab2 :: IdleSound ( void )
{
EMIT_SOUND_DYN( edict(), CHAN_VOICE, RANDOM_SOUND_ARRAY(pIdleSounds), GetSoundVolue(), ATTN_IDLE, 0, GetVoicePitch() );
}

//=========================================================
// AlertSound
//=========================================================
void CHeadCrab2 :: AlertSound ( void )
{
EMIT_SOUND_DYN( edict(), CHAN_VOICE, RANDOM_SOUND_ARRAY(pAlertSounds), GetSoundVolue(), ATTN_IDLE, 0, GetVoicePitch() );
}

//=========================================================
// AlertSound
//=========================================================
void CHeadCrab2 :: PainSound ( void )
{
EMIT_SOUND_DYN( edict(), CHAN_VOICE, RANDOM_SOUND_ARRAY(pPainSounds), GetSoundVolue(), ATTN_IDLE, 0, GetVoicePitch() );
}

//=========================================================
// DeathSound
//=========================================================
void CHeadCrab2 :: DeathSound ( void )
{
EMIT_SOUND_DYN( edict(), CHAN_VOICE, RANDOM_SOUND_ARRAY(pDeathSounds), GetSoundVolue(), ATTN_IDLE, 0, GetVoicePitch() );
}

Schedule_t* CHeadCrab2 :: GetScheduleOfType ( int Type )
{
switch ( Type )
{
case SCHED_RANGE_ATTACK1:
{
return &slHCRangeAttack12[ 0 ];
}
break;
}

return CBaseMonster::GetScheduleOfType( Type );
}

Währe nett wenn du mir sagen kannst wie ich das in ordnung bringe und auch wie man
mit den Anim Events umgeht. Bei den waffen musste ich ja nur den Namen der Animation
schreiben ,aber das hier ist noch neu für mich.
Schon mal danke für die Mühe.

--

zum Seitenanfang zum Seitenende Profil || Suche
005
22.10.2001, 21:46
TheTinySteini



LeapTouch(), diese Zeile:
pOther->TakeDamage( pev, pev, GetDamageAmount(), DMG_SLASH );

dort wird der Schaden zugefügt. Aber: dort kannst du keinen Radius einstellen, er nimmt automatisch das Entity, auf das er beim Springen getroffen ist.
Mach am besten ein paar ALERTs rein, vor den Klammern, so dass du überprüfen kannst, ob das ganze überhaupt aufgerufen wird.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
006
24.10.2001, 18:03
MK



Habs leider immer noch nicht hinbekommen. Bin für weitere Vorschläge dankbar.

--

zum Seitenanfang zum Seitenende Profil || Suche