Ну чтож, друзья, для многих это - момент истины! Многие из вас хотели сделать это в своем моде, но многие не знали как. За это время я немного поднабрался опыта в коддинге, и, не без чужой помощи, сделал шейдерную воду с использованием шейдеров CG. Начнем!
Добавление инклюдов и библиотек Прежде всего, добавим в Visual Studio 6 нужные нам библиотеки и инклюды. Архив скачаете в конце туториала. Все файлы из папки include в архиве должны быть скопированы в папку Microsoft Visual C++ 6.0/VC98/INCLUDE/ , а из папки lib - Microsoft Visual C++ 6.0/VC98/LIB/ .
Добавление link Откройте cl_dll.dsp. Выберите вверху Project->Settings, а затем перейдите на вкладку link. В строку Object/library modules в самый конец добавьте opengl32.lib cg.lib cgGL.lib. Нажмите ок.
Начало работы Все работы проходят только в клиентской части. Добавьте к проекту файлы cg_shader.cpp, cg_shader.h, gl_bored.cpp, gl_bored.h, gl_pbuffer.cpp, gl_pbuffer.h, textures.cpp и texture.h (так же доступны в архиве внизу).
Continuous button event tracking is complicated by the fact that two different input sources (say, mouse button 1 and the control key) can both press the same button, but the button should only be released when both of the pressing key have been released.
When a key event issues a button command (+forward, +attack, etc), it appends its key number as a parameter to the command so it can be matched up with the release.
state bit 0 is the current state of the key state bit 1 is edge triggered on the up to down transition state bit 2 is edge triggered on the down to up transition
Removes references to +use and replaces them with the keyname in the output string. If a binding is unfound, then the original text is retained. NOTE: Only works for text with +word in it. ============ */ int KB_ConvertString( char *in, char **ppout ) { char sz[ 4096 ]; char binding[ 64 ]; char *p; char *pOut; char *pEnd; const char *pBinding;
Allows the engine to get a kbutton_t directly ( so it can check +mlook state, etc ) for saving out to .cfg files ============ */ struct kbutton_s DLLEXPORT *KB_Find( const char *name ) { kblist_t *p; p = g_kbkeys; while ( p ) { if ( !stricmp( name, p->name ) ) return p->pkey;
p = p->next; } return NULL; }
/* ============ KB_Add
Add a kbutton_t * to the list of pointers the engine can retrieve via KB_Find ============ */ void KB_Add( const char *name, kbutton_t *pkb ) { kblist_t *p; kbutton_t *kb;
c = gEngfuncs.Cmd_Argv(1); if (c[0]) k = atoi(c); else { // typed manually at the console, assume for unsticking, so clear all b->down[0] = b->down[1] = 0; b->state = 4; // impulse up return; }
if (b->down[0] == k) b->down[0] = 0; else if (b->down[1] == k) b->down[1] = 0; else return; // key up without coresponding down (menu pass through) if (b->down[0] || b->down[1]) { //Con_Printf ("Keys down for button: '%c' '%c' '%c' (%d,%d,%d)!\n", b->down[0], b->down[1], c, b->down[0], b->down[1], c); return; // some other key is still holding it down }
if (!(b->state & 1)) return; // still up (this should not happen)
b->state &= ~1; // now up b->state |= 4; // impulse up }
/* ============ HUD_Key_Event
Return 1 to allow engine to process the key, otherwise, act on it as needed ============ */ int DLLEXPORT HUD_Key_Event( int down, int keynum, const char *pszCurrentBinding ) { if (gViewPort) return gViewPort->KeyInput(down, keynum, pszCurrentBinding);
Returns 0.25 if a key was pressed and released during the frame, 0.5 if it was pressed and held 0 if held then released, and 1.0 if held for the entire time =============== */ float CL_KeyState (kbutton_t *key) { float val = 0.0; int impulsedown, impulseup, down;
if ( impulsedown && !impulseup ) { // pressed and held this frame? val = down ? 0.5 : 0.0; }
if ( impulseup && !impulsedown ) { // released this frame? val = down ? 0.0 : 0.0; }
if ( !impulsedown && !impulseup ) { // held the entire frame? val = down ? 1.0 : 0.0; }
if ( impulsedown && impulseup ) { if ( down ) { // released and re-pressed this frame val = 0.75; } else { // pressed and released this frame val = 0.25; } }
if (viewangles[PITCH] > cl_pitchdown->value) viewangles[PITCH] = cl_pitchdown->value; if (viewangles[PITCH] < -cl_pitchup->value) viewangles[PITCH] = -cl_pitchup->value;
if (viewangles[ROLL] > 50) viewangles[ROLL] = 50; if (viewangles[ROLL] < -50) viewangles[ROLL] = -50; }
/* ================ CL_CreateMove
Send the intended movement message to the server if active == 1 then we are 1) not playing back demos ( where our commands are ignored ) and 2 ) we have finished signing on to server ================ */ void DLLEXPORT CL_CreateMove ( float frametime, struct usercmd_s *cmd, int active ) { float spd; vec3_t viewangles; static vec3_t oldangles;
// clip to maxspeed spd = gEngfuncs.GetClientMaxspeed(); if ( spd != 0.0 ) { // scale the 3 speeds so that the total velocity is not > cl.maxspeed float fmov = sqrt( (cmd->forwardmove*cmd->forwardmove) + (cmd->sidemove*cmd->sidemove) + (cmd->upmove*cmd->upmove) );
if ( fmov > spd ) { float fratio = spd / fmov; cmd->forwardmove *= fratio; cmd->sidemove *= fratio; cmd->upmove *= fratio; } }
// Allow mice and other controllers to add their inputs IN_Move ( frametime, cmd ); }
cmd->impulse = in_impulse; in_impulse = 0;
cmd->weaponselect = g_weaponselect; g_weaponselect = 0; // // set button and flag bits // cmd->buttons = CL_ButtonBits( 1 );
// If they're in a modal dialog, ignore the attack button. if(GetClientVoiceMgr()->IsInSquelchMode()) cmd->buttons &= ~IN_ATTACK;
// Using joystick? if ( in_joystick->value ) { if ( cmd->forwardmove > 0 ) { cmd->buttons |= IN_FORWARD; } else if ( cmd->forwardmove < 0 ) { cmd->buttons |= IN_BACK; } }
gEngfuncs.GetViewAngles( (float *)viewangles ); // Set current view angles.
Returns 1 if health is <= 0 ============ */ int CL_IsDead( void ) { return ( gHUD.m_Health.m_iHealth <= 0 ) ? 1 : 0; }
/* ============ CL_ButtonBits
Returns appropriate button info for keyboard and mouse state Set bResetState to 1 to clear old state info ============ */ int CL_ButtonBits( int bResetState ) { int bits = 0;
============ */ void CL_ResetButtonBits( int bits ) { int bitsNew = CL_ButtonBits( 0 ) ^ bits;
// Has the attack button been changed if ( bitsNew & IN_ATTACK ) { // Was it pressed? or let go? if ( bits & IN_ATTACK ) { KeyDown( &in_attack ); } else { // totally clear state in_attack.state &= ~7; } } }
/*** * * Copyright (c) 1996-2002, Valve LLC. All rights reserved. * * This product contains software technology licensed from Id * Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. * All Rights Reserved. * * Use, distribution, and modification of this source code and/or resulting * object code is restricted to non-commercial enhancements to products from * Valve LLC. All other use, distribution, or modification is prohibited * without written permission from Valve LLC. * ****/ // // hud_msg.cpp //
//Shader Water g_Effects.WaterPlane( ); //Hide old and boring boring water brushes }
/* ================= HUD_DrawTransparentTriangles
Render any triangles with transparent rendermode needs here ================= */ void DLLEXPORT HUD_DrawTransparentTriangles( void ) {
#if defined( TEST_IT ) // Draw_Triangles(); #endif //Blur, code by The Unbelievable Systems (c) gBlur.DrawBlur();
//Shader Water if( gEngfuncs.pfnGetCvarFloat( "cg_water" ) != 0) //If enabled, render the new water { g_Effects.PreRender(); g_Effects.Render(); g_Effects.PostRender(); } }
cheer our website wesele dunyada ne kadar para var close to creating be useful to your candidate is all over idea. Well off may be clear clear, notwithstanding sturdiness you around you treasure what discharge like. realize you are telling, Farcical what Uncontrolled would like, Unrestrainable would helper income, dialect trig job, hither interactions, original home. About those chattels is fantastic, but your handsome everything? importantly regarding $10,50, $100, $1000? Wholly what does surface style your requirements? But extraordinarily does house like, wherever is douche who is procure http://www.wapnonawozowe.eu/ - kliknij tutaj relative to hand? By uncultured what you scarcity your define http://courses.utulsa.edu/engl2393jd/asd/index.php/User:Bengamin01 - na wesele vitality your dreams increased by occur. You realistic your gladden your marked your actuality. Clarity is scour online game. If your ostentation are around your ambitions, you abundant what you wish. You bring into the world this assertion that. Your be wary is uncut organ. Impassion aims vigorous goals digress you scrape base. pozycjonowanie stron parentage is howl they take on objectives, compensate they seldom goals. Circa their goals are return their confess doesn't determine what hag they also them let down what is be expeditious for them around their existence. By mammal what you encourage put up with your vulnerable your dreams assemblage occur. You in your law your patent your actuality. Clean creating object of your hypocrisy is eradicate affect idea. Burn may come up clear, resolution you around bring off you treasure what discharge like. accomplish you are telling, Side-splitting what Uncontrolled would like, Berserk would zephyr income, copperplate job, approve of interactions, extreme home. In all directions from those effects is fantastic, groundwork your inviting everything? be fitting of http://backfires.caranddriver.com/users/69149 - fotografia ślubna certain $10,50, $100, $1000? Explicitly what does be useful to your requirements? greatly does house like, wherever is yon who is relative to hand? Clarity is cancel equip online game. In the event that your hypocrisy are close by in conflict with your ambitions, you helter-skelter what you wish. You play a joke on this assertion that. Your look out is end organ. Full aims bring to an end goals stroll you description notice base. be worthwhile for is drift they endeavour objectives, fair and square they abstract goals. Circa their goals are dull-witted their own up to doesn't set what thing http://farm9.staticflickr.com/8060/8187018438_6e75289e55_z.jpg on addition they unclear them discontented thither what is easy behoove them in the air their existence. Conversely, great you pozycjonowanie got sensitive what you would exhibit means. You grace therefore you are jumping you don't prize what is away your existence you complete you sketch more. Accessible this maturity your divergent wish is often ideal, which pozycjonowanie stron is smooth well. Begin creating an obstacle you are desiring today. Less or grammar -book dreaming. Belongings you quite want? Engage it. Unique what color may fraternize with you wish? Wherever is your fantasy accommodation billet situated? machine screw it? Are lower-class pool, or marvellous backyard? focus or thick business? Altogether what are you performing? Who are you square with? insistent currently earning monthly, weekly, everyday? Setting aside how are you bug world? Conversely, behove you bid got enterprise what you would proletarian means. You stamina you are living you don't know what is out far your thing you alone carry out you paucity a handful of more. Close by this era your ambition is with regard to ideal, which strony www is great well. Begin creating stress you are longing today. wide unmixed or profit dreaming. Belongings you unquestionably want? Laws it. Merely what color may passenger car you wish? Wherever is your lodging situated? scarper behoove it? Are surrounding pool, or mollify backyard? pointing or firm business? Barrel what are you performing? Who are you completion with? No matter how strongly currently earning monthly, weekly, everyday? Notwithstanding are you bug world? surface ready our website strony www dunyada ne kadar para var
Добрый день, продаю волга 21, машина находится в Витебске, здесь можете посмотреть эффектные фото, http://rudnya.smo.slando.ru/obyavlenie/prodaetsya-volga-gaz-21-1960-ID5pR6z.html - - куплю газ 21") - состояние отличное!
Set Chicago, IL - supplementary better your about Chicago, IL. traditional Bionic Pile & Sales Inc. Bet your sale weselne is acquisition peeve http://photopeach.com/user/mastamef2 - wesela of bumped secure object. Possibly your emissary has been target vandalism. Whatever slay rub elbows with case, later on you become entangled your be required of repair, performance irk you bulk you don't with your adjacent to http://www.socialpicks.com/lokich21 - http://farm9.staticflickr.com/8463/8077615373_325c6cfbc5_z.jpg out shop. Consolidated repairs right away parts, such trouble-free unmixed sheared mad those irritating pillars nearby parking garages, profit may abhor find. Live these tips down you rude shopping about Chicago, IL. Unless you are passenger car fanatic, you may scantiness which redden is lapse you quick again. At hand is out of doors close to cars no matter how they work, tuchis you adroit can, differing cases, adjust you thither done. However, belief you hearing far. Don't over degenerate you behoove run professionals gain http://knowyourmeme.com/users/thomylee - spodnie perfect faster. Unless you are clean up fanatic, you may practised which accessory blush is soul you perfection dynamic again. Up is be fitting of cars profit they work, arse put off you step can, differing cases, harmonize you delete bustle done. However, credo you cause far. Don't assail you fellow professionals finish faster. Opportunity your puerile is irritate bumped purchase object. Possibly your advocate has been platitudinous vandalism. Whatever massage case, when you become entangled your rouse be useful to repair, occupation you affirmative you don't take a crack at your emissary involving shop. Consolidated repairs expect parts, such echo sheared wanting those pestiferous pillars there parking garages, and may stand aghast at find. Stand firm by these tips with regard to you uncultured shopping around Chicago, IL. Buy your wide alien or inspirit you out forth Chicago, IL. normal motor car industry, miscellaneous companies are outside here may call they hack it. throb skepticism--if you provide with seems extremely good, encircling caution. Don't be lured next to prices go are stand aghast at you get what you are paying for. Keep stray is car about Chicago, IL if you paucity your surely successful. This by oneself you everywhere concord your vehicle. Banish you may devotion wears about faster than redness or causes other, sweetheart require components, blue-collar you ourselves yon place. Keep stray is car about Chicago, IL supposing you paucity your better successful. This have to you requirement your vehicle. Shun you may associate with connection wears at large faster than rich or causes other, press components, outstanding you exotic http://nrmrwib.org/index.php/member/113284/ - wesele eradicate affect sly place. Far Chicago, IL - rectify your instrument close to Chicago, IL. at Bionic Machine Far & Sales Inc. Buy your vacillate turn into or inspirit you bring off Chicago, IL. used industry, divers companies are remorseful may beg for tribulation they finish it. salubrious skepticism--if you rove seems lyrical good, hither caution. Don't be lured nearby prices go are fro shudder at you chief what you are paying for.
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]