AMX Mod X Plugin Approver
|
09-14-2010
, 18:03
Re: How do you patch your hl1.dll to increase the precache limit?
|
#23
|
The method used is simply to redirect precache_model[] and model[] array (because right now, i'm testing only with model) to custom one. Joripito has made a simple module to allocate memory. Then, with orpheu, I've replaced the address of all array references to the new one and replace all the 512 check with the new limit. For example the new array is 1024. I've tried on fy_dangercity where I know the model count is near of the limit, I've added some custom models like you can see to go over 512. This part works fine. But there is a problem in-game :p ; you see no models/sprites ( even the default ones ) at all and the client console is flooding with message like "Tried to link edict 168 without model". That's why I've said half-working. Right now we try to figure out the problem. ( The output you see from the link is directly from precache_model[] array, after server start )
HL :
PHP Code:
models/w_antidote.mdl models/w_security.mdl models/w_longjump.mdl items/suitcharge1.wav items/suitchargeno1.wav items/suitchargeok1.wav common/wpn_hudoff.wav common/wpn_hudon.wav common/wpn_moveselect.wav common/wpn_denyselect.wav player/geiger6.wav player/geiger5.wav player/geiger4.wav player/geiger3.wav player/geiger2.wav player/geiger1.wav sprites/zerogxplode.spr sprites/WXplo1.spr sprites/steam1.spr sprites/bubble.spr sprites/bloodspray.spr sprites/blood.spr sprites/smokepuff.spr sprites/eexplo.spr sprites/fexplo.spr sprites/fexplo1.spr sprites/b-tele1.spr sprites/c-tele1.spr sprites/ledglow.spr sprites/laserdot.spr sprites/explode1.spr weapons/bullet_hit1.wav weapons/bullet_hit2.wav items/weapondrop1.wav weapons/generic_reload.wav
That's something you can check easily by looking the gamedll with IDA for example.
For example, you can see in ClientPrecache() function. here the IDA decompiled output :
PHP Code:
int __cdecl ClientPrecache() { signed int v0; // edi@1 signed int i; // esi@3 signed int v2; // esi@5 int v3; // eax@6 signed int v4; // esi@8 signed int v5; // esi@10 int v6; // eax@11 char v7; // bl@13 int result; // eax@33 int v9; // [sp+Ch] [bp-30h]@8 int v10; // [sp+10h] [bp-2Ch]@8 int v11; // [sp+14h] [bp-28h]@8 int v12; // [sp+18h] [bp-24h]@8 int v13; // [sp+1Ch] [bp-20h]@8 int j; // [sp+20h] [bp-1Ch]@8 int v15; // [sp+24h] [bp-18h]@8 int v16; // [sp+28h] [bp-14h]@8 int v17; // [sp+2Ch] [bp-10h]@8 int v18; // [sp+30h] [bp-Ch]@13 int v19; // [sp+34h] [bp-8h]@13 int v20; // [sp+38h] [bp-4h]@13
PRECACHE_SOUND("weapons/dryfire_pistol.wav"); PRECACHE_SOUND("weapons/dryfire_rifle.wav"); PRECACHE_SOUND("player/pl_shot1.wav"); PRECACHE_SOUND("player/pl_die1.wav"); PRECACHE_SOUND("player/headshot1.wav"); PRECACHE_SOUND("player/headshot2.wav"); PRECACHE_SOUND("player/headshot3.wav"); PRECACHE_SOUND("player/bhit_flesh-1.wav"); PRECACHE_SOUND("player/bhit_flesh-2.wav"); PRECACHE_SOUND("player/bhit_flesh-3.wav"); PRECACHE_SOUND("player/bhit_kevlar-1.wav"); PRECACHE_SOUND("player/bhit_helmet-1.wav"); PRECACHE_SOUND("player/die1.wav"); PRECACHE_SOUND("player/die2.wav"); PRECACHE_SOUND("player/die3.wav"); PRECACHE_SOUND("player/death6.wav"); PRECACHE_SOUND("radio/locknload.wav"); PRECACHE_SOUND("radio/letsgo.wav"); PRECACHE_SOUND("radio/moveout.wav"); PRECACHE_SOUND("radio/com_go.wav"); PRECACHE_SOUND("radio/rescued.wav"); PRECACHE_SOUND("radio/rounddraw.wav"); PRECACHE_SOUND("items/kevlar.wav"); PRECACHE_SOUND("items/ammopickup2.wav"); PRECACHE_SOUND("items/nvg_on.wav"); PRECACHE_SOUND("items/nvg_off.wav"); PRECACHE_SOUND("items/equip_nvg.wav"); PRECACHE_SOUND("weapons/c4_beep1.wav"); PRECACHE_SOUND("weapons/c4_beep2.wav"); PRECACHE_SOUND("weapons/c4_beep3.wav"); PRECACHE_SOUND("weapons/c4_beep4.wav"); PRECACHE_SOUND("weapons/c4_beep5.wav"); PRECACHE_SOUND("weapons/c4_explode1.wav"); PRECACHE_SOUND("weapons/c4_plant.wav"); PRECACHE_SOUND("weapons/c4_disarm.wav"); PRECACHE_SOUND("weapons/c4_disarmed.wav"); PRECACHE_SOUND("weapons/explode3.wav"); PRECACHE_SOUND("weapons/explode4.wav"); PRECACHE_SOUND("weapons/explode5.wav"); PRECACHE_SOUND("player/sprayer.wav"); PRECACHE_SOUND("player/pl_fallpain2.wav"); PRECACHE_SOUND("player/pl_fallpain3.wav"); PRECACHE_SOUND("player/pl_snow1.wav"); PRECACHE_SOUND("player/pl_snow2.wav"); PRECACHE_SOUND("player/pl_snow3.wav"); PRECACHE_SOUND("player/pl_snow4.wav"); PRECACHE_SOUND("player/pl_snow5.wav"); PRECACHE_SOUND("player/pl_snow6.wav"); PRECACHE_SOUND("player/pl_step1.wav"); PRECACHE_SOUND("player/pl_step2.wav"); PRECACHE_SOUND("player/pl_step3.wav"); PRECACHE_SOUND("player/pl_step4.wav"); PRECACHE_SOUND("common/npc_step1.wav"); PRECACHE_SOUND("common/npc_step2.wav"); PRECACHE_SOUND("common/npc_step3.wav"); PRECACHE_SOUND("common/npc_step4.wav"); PRECACHE_SOUND("player/pl_metal1.wav"); PRECACHE_SOUND("player/pl_metal2.wav"); PRECACHE_SOUND("player/pl_metal3.wav"); PRECACHE_SOUND("player/pl_metal4.wav"); PRECACHE_SOUND("player/pl_dirt1.wav"); PRECACHE_SOUND("player/pl_dirt2.wav"); PRECACHE_SOUND("player/pl_dirt3.wav"); PRECACHE_SOUND("player/pl_dirt4.wav"); PRECACHE_SOUND("player/pl_duct1.wav"); PRECACHE_SOUND("player/pl_duct2.wav"); PRECACHE_SOUND("player/pl_duct3.wav"); PRECACHE_SOUND("player/pl_duct4.wav"); PRECACHE_SOUND("player/pl_grate1.wav"); PRECACHE_SOUND("player/pl_grate2.wav"); PRECACHE_SOUND("player/pl_grate3.wav"); PRECACHE_SOUND("player/pl_grate4.wav"); PRECACHE_SOUND("player/pl_slosh1.wav"); PRECACHE_SOUND("player/pl_slosh2.wav"); PRECACHE_SOUND("player/pl_slosh3.wav"); PRECACHE_SOUND("player/pl_slosh4.wav"); PRECACHE_SOUND("player/pl_tile1.wav"); PRECACHE_SOUND("player/pl_tile2.wav"); PRECACHE_SOUND("player/pl_tile3.wav"); PRECACHE_SOUND("player/pl_tile4.wav"); PRECACHE_SOUND("player/pl_tile5.wav"); PRECACHE_SOUND("player/pl_swim1.wav"); PRECACHE_SOUND("player/pl_swim2.wav"); PRECACHE_SOUND("player/pl_swim3.wav"); PRECACHE_SOUND("player/pl_swim4.wav"); PRECACHE_SOUND("player/pl_ladder1.wav"); PRECACHE_SOUND("player/pl_ladder2.wav"); PRECACHE_SOUND("player/pl_ladder3.wav"); PRECACHE_SOUND("player/pl_ladder4.wav"); PRECACHE_SOUND("player/pl_wade1.wav"); PRECACHE_SOUND("player/pl_wade2.wav"); PRECACHE_SOUND("player/pl_wade3.wav"); PRECACHE_SOUND("player/pl_wade4.wav"); PRECACHE_SOUND("debris/wood1.wav"); PRECACHE_SOUND("debris/wood2.wav"); PRECACHE_SOUND("debris/wood3.wav"); PRECACHE_SOUND("plats/train_use1.wav"); PRECACHE_SOUND("plats/vehicle_ignition.wav"); PRECACHE_SOUND("buttons/spark5.wav"); PRECACHE_SOUND("buttons/spark6.wav"); PRECACHE_SOUND("debris/glass1.wav"); PRECACHE_SOUND("debris/glass2.wav"); PRECACHE_SOUND("debris/glass3.wav"); PRECACHE_SOUND("items/flashlight1.wav"); PRECACHE_SOUND("items/flashlight1.wav"); PRECACHE_SOUND("common/bodysplat.wav"); PRECACHE_SOUND("player/pl_pain2.wav"); PRECACHE_SOUND("player/pl_pain4.wav"); PRECACHE_SOUND("player/pl_pain5.wav"); PRECACHE_SOUND("player/pl_pain6.wav"); PRECACHE_SOUND("player/pl_pain7.wav"); v0 = 12; if ( !sub_100C7EF0("czero") ) v0 = 10; for ( i = 0; i < v0; ++i ) PRECACHE_MODEL(*(&off_1010D06C + i)); v2 = 100; do { v3 = sub_10036050(v2); if ( !v3 ) break; PRECACHE_MODEL(v3); ++v2; } while ( v2 <= 199 ); PRECACHE_MODEL("models/p_ak47.mdl"); PRECACHE_MODEL("models/p_aug.mdl"); PRECACHE_MODEL("models/p_awp.mdl"); PRECACHE_MODEL("models/p_c4.mdl"); PRECACHE_MODEL("models/w_c4.mdl"); PRECACHE_MODEL("models/p_deagle.mdl"); PRECACHE_MODEL("models/shield/p_shield_deagle.mdl"); PRECACHE_MODEL("models/p_flashbang.mdl"); PRECACHE_MODEL("models/shield/p_shield_flashbang.mdl"); PRECACHE_MODEL("models/p_hegrenade.mdl"); PRECACHE_MODEL("models/shield/p_shield_hegrenade.mdl"); PRECACHE_MODEL("models/p_glock18.mdl"); PRECACHE_MODEL("models/shield/p_shield_glock18.mdl"); PRECACHE_MODEL("models/p_p228.mdl"); PRECACHE_MODEL("models/shield/p_shield_p228.mdl"); PRECACHE_MODEL("models/p_smokegrenade.mdl"); PRECACHE_MODEL("models/shield/p_shield_smokegrenade.mdl"); PRECACHE_MODEL("models/p_usp.mdl"); PRECACHE_MODEL("models/shield/p_shield_usp.mdl"); PRECACHE_MODEL("models/p_fiveseven.mdl"); PRECACHE_MODEL("models/shield/p_shield_fiveseven.mdl"); PRECACHE_MODEL("models/p_knife.mdl"); PRECACHE_MODEL("models/shield/p_shield_knife.mdl"); PRECACHE_MODEL("models/w_flashbang.mdl"); PRECACHE_MODEL("models/w_hegrenade.mdl"); PRECACHE_MODEL("models/p_sg550.mdl"); PRECACHE_MODEL("models/p_g3sg1.mdl"); PRECACHE_MODEL("models/p_m249.mdl"); PRECACHE_MODEL("models/p_m3.mdl"); PRECACHE_MODEL("models/p_m4a1.mdl"); PRECACHE_MODEL("models/p_mac10.mdl"); PRECACHE_MODEL("models/p_mp5.mdl"); PRECACHE_MODEL("models/p_ump45.mdl"); PRECACHE_MODEL("models/p_p90.mdl"); PRECACHE_MODEL("models/p_scout.mdl"); PRECACHE_MODEL("models/p_sg552.mdl"); PRECACHE_MODEL("models/w_smokegrenade.mdl"); PRECACHE_MODEL("models/p_tmp.mdl"); PRECACHE_MODEL("models/p_elite.mdl"); PRECACHE_MODEL("models/p_xm1014.mdl"); PRECACHE_MODEL("models/p_galil.mdl"); PRECACHE_MODEL("models/p_famas.mdl"); PRECACHE_MODEL("models/p_shield.mdl"); PRECACHE_MODEL("models/w_shield.mdl"); v4 = 0; v15 = dword_10158E0C; v16 = dword_10158E10; v17 = dword_10158E14; v9 = -1038614528; v10 = -1044381696; v11 = -1037828096; v12 = 1108869120; v13 = 1103101952; for ( j = 1109655552; v4 < v0; ++v4 ) PRECAHE_MODEL(2, &v9, &v12, *(&off_1010D06C + v4)); v5 = 100; do { v6 = sub_10036050(v5); if ( !v6 ) break; PRECAHE_MODEL(3, &v9, &v12, v6); ++v5; } while ( v5 <= 199 ); PRECAHE_MODEL(0, &v15, &v15, "sprites/black_smoke1.spr"); PRECAHE_MODEL(0, &v15, &v15, "sprites/black_smoke2.spr"); PRECAHE_MODEL(0, &v15, &v15, "sprites/black_smoke3.spr"); PRECAHE_MODEL(0, &v15, &v15, "sprites/black_smoke4.spr"); PRECAHE_MODEL(0, &v15, &v15, "sprites/fast_wallpuff1.spr"); PRECAHE_MODEL(0, &v15, &v15, "sprites/smokepuff.spr"); PRECAHE_MODEL(0, &v15, &v15, "sprites/gas_puff_01.spr"); PRECAHE_MODEL(0, &v15, &v15, "sprites/scope_arc.tga"); PRECAHE_MODEL(0, &v15, &v15, "sprites/scope_arc_nw.tga"); PRECAHE_MODEL(0, &v15, &v15, "sprites/scope_arc_ne.tga"); PRECAHE_MODEL(0, &v15, &v15, "sprites/scope_arc_sw.tga"); v7 = sub_100C7EF0("czero"); v9 = -1052770304; v10 = -1061158912; v11 = -1045430272; v18 = 1094713344; v19 = 1086324736; v20 = 1102053376; v12 = 1094713344; v13 = 1086324736; j = 1102053376; if ( v7 ) { v9 = -1051721728; v10 = -1061158912; v11 = -1045430272; v18 = 1095761920; v19 = 1086324736; v20 = 1102053376; v12 = 1095761920; v13 = 1086324736; j = 1102053376; } PRECAHE_MODEL(2, &v9, &v12, "models/p_deagle.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_p228.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_elite.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_usp.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_fiveseven.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_glock18.mdl"); v9 = -1043857408; v10 = -1047003136; v11 = -1045954560; v18 = 1103626240; v19 = 1102577664; v20 = 1101529088; v12 = 1103626240; v13 = 1102577664; j = 1101529088; if ( v7 ) { v9 = -1043333120; v10 = -1047003136; v11 = -1045954560; v18 = 1104150528; v19 = 1102577664; v20 = 1101529088; v12 = 1104150528; v13 = 1102577664; j = 1101529088; } PRECAHE_MODEL(2, &v9, &v12, "models/p_xm1014.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_m3.mdl"); v9 = -1044905984; v10 = -1056964608; v11 = -1046478848; v18 = 1102577664; v19 = 1090519040; v20 = 1101004800; v12 = 1102577664; v13 = 1090519040; j = 1101004800; if ( v7 ) { v9 = -1044905984; v10 = -1055916032; v11 = -1046478848; v18 = 1102577664; v19 = 1099431936; v20 = 1101004800; v12 = 1102577664; v13 = 1099431936; j = 1101004800; } PRECAHE_MODEL(2, &v9, &v12, "models/p_mac10.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_mp5.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_ump45.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_tmp.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_p90.mdl"); v9 = -1040711680; v10 = -1056964608; v11 = -1045954560; v18 = 1106771968; v19 = 1094713344; v20 = 1106771968; v12 = 1106771968; v13 = 1094713344; j = 1106771968; if ( v7 ) { v9 = -1038614528; v10 = -1039925248; v11 = -1045430272; v18 = 1108869120; v19 = 1097859072; v20 = 1108082688; v12 = 1108869120; v13 = 1097859072; j = 1108082688; } PRECAHE_MODEL(2, &v9, &v12, "models/p_ak47.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_aug.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_awp.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_g3sg1.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_sg550.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_m4a1.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_scout.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_sg552.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_famas.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_galil.mdl"); v9 = -1044381696; v10 = -1054867456; v11 = -1046478848; v18 = 1103626240; v19 = 1092616192; v20 = 1101004800; v12 = 1103626240; v13 = 1092616192; j = 1101004800; if ( v7 ) { v9 = -1041235968; v10 = -1054867456; v11 = -1046478848; v18 = 1106247680; v19 = 1093664768; v20 = 1101004800; v12 = 1106247680; v13 = 1093664768; j = 1101004800; } PRECAHE_MODEL(2, &v9, &v12, "models/p_m249.mdl"); v9 = -1059061760; v18 = 1088421888; v10 = -1059061760; v19 = 1088421888; v12 = 1088421888; v13 = 1088421888; v11 = -1049624576; v20 = 1097859072; j = 1097859072; PRECAHE_MODEL(2, &v9, &v12, "models/p_c4.mdl"); v9 = -1065353216; v10 = -1056964608; v11 = -1069547520; v18 = 1077936128; v19 = 1088421888; v20 = 1077936128; v12 = 1077936128; v13 = 1088421888; j = 1077936128; if ( v7 ) { v9 = -1048051712; v10 = -1056964608; v11 = -1069547520; v18 = 1099431936; v19 = 1088421888; v20 = 1077936128; v12 = 1099431936; v13 = 1088421888; j = 1077936128; } PRECAHE_MODEL(2, &v9, &v12, "models/w_c4.mdl"); v18 = -1059061760; v19 = -1073741824; v20 = -1047527424; v9 = -1059061760; v10 = -1073741824; v11 = -1047527424; if ( v7 ) { v18 = -1059061760; v19 = -1069547520; v20 = -1047527424; v9 = -1059061760; v10 = -1069547520; v11 = -1047527424; } v18 = 1088421888; v19 = 1073741824; v12 = 1088421888; v13 = 1073741824; v20 = 1099956224; j = 1099956224; PRECAHE_MODEL(2, &v9, &v12, "models/p_flashbang.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_hegrenade.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/p_smokegrenade.mdl"); v18 = -1063256064; v19 = -1063256064; v20 = -1063256064; v9 = -1063256064; v10 = -1063256064; v11 = -1063256064; if ( v7 ) { v18 = -1063256064; v19 = -1063256064; v20 = -1059061760; v9 = -1063256064; v10 = -1063256064; v11 = -1059061760; } v18 = 1084227584; v19 = 1084227584; v12 = 1084227584; v13 = 1084227584; v20 = 1096810496; j = 1096810496; PRECAHE_MODEL(2, &v9, &v12, "models/w_flashbang.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/w_hegrenade.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/w_smokegrenade.mdl"); v9 = -1059061760; v18 = 1088421888; v10 = -1053818880; v19 = 1086324736; v12 = 1088421888; v13 = 1086324736; v11 = -1047527424; v20 = 1099956224; j = 1099956224; PRECAHE_MODEL(2, &v9, &v12, "models/p_knife.mdl"); v9 = -1048576000; v10 = -1056964608; v11 = -1034420224; v18 = 1098907648; v19 = 1086324736; v20 = 1103101952; v12 = 1098907648; v13 = 1086324736; j = 1103101952; if ( v7 ) { v9 = -1045954560; v10 = -1043857408; v11 = -1034420224; v18 = 1101529088; v19 = 1102577664; v20 = 1103101952; v12 = 1101529088; v13 = 1102577664; j = 1103101952; } PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_deagle.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_fiveseven.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_flashbang.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_glock18.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_hegrenade.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_knife.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_p228.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_smokegrenade.mdl"); PRECAHE_MODEL(2, &v9, &v12, "models/shield/p_shield_usp.mdl"); PRECACHE_SOUND("common/wpn_hudoff.wav"); PRECACHE_SOUND("common/wpn_hudon.wav"); PRECACHE_SOUND("common/wpn_moveselect.wav"); PRECACHE_SOUND("common/wpn_select.wav"); PRECACHE_SOUND("common/wpn_denyselect.wav"); PRECACHE_SOUND("player/geiger6.wav"); PRECACHE_SOUND("player/geiger5.wav"); PRECACHE_SOUND("player/geiger4.wav"); PRECACHE_SOUND("player/geiger3.wav"); PRECACHE_SOUND("player/geiger2.wav"); PRECACHE_SOUND("player/geiger1.wav"); if ( dword_1015A804 ) sub_100C51B0("enemy_terrorist"); LOWORD(word_101289C8) = PRECACHE_MODEL("sprites/shadow_circle.spr"); PRECACHE_MODEL("sprites/wall_puff1.spr"); PRECACHE_MODEL("sprites/wall_puff2.spr"); PRECACHE_MODEL("sprites/wall_puff3.spr"); PRECACHE_MODEL("sprites/wall_puff4.spr"); PRECACHE_MODEL("sprites/black_smoke1.spr"); PRECACHE_MODEL("sprites/black_smoke2.spr"); PRECACHE_MODEL("sprites/black_smoke3.spr"); PRECACHE_MODEL("sprites/black_smoke4.spr"); PRECACHE_MODEL("sprites/fast_wallpuff1.spr"); PRECACHE_MODEL("sprites/pistol_smoke1.spr"); PRECACHE_MODEL("sprites/pistol_smoke2.spr"); PRECACHE_MODEL("sprites/rifle_smoke1.spr"); PRECACHE_MODEL("sprites/rifle_smoke2.spr"); PRECACHE_MODEL("sprites/rifle_smoke3.spr"); dword_10158FF8("sprites/scope_arc.tga"); dword_10158FF8("sprites/scope_arc_nw.tga"); dword_10158FF8("sprites/scope_arc_ne.tga"); dword_10158FF8("sprites/scope_arc_sw.tga"); result = PRECACHE_EVENT(1, "events/decal_reset.sc"); word_101289D0 = result; return result; }
__________________
Last edited by Arkshine; 09-15-2010 at 04:14.
|
|