|
|
Diskusn boardy |
|
|
|
Najnovie lnky |
|
Automatická textová správa Vocko Tutoril 07.06.2009 : 11:02:12
|
V tomto tutoriále si spravíme automatickú textovú správu, ktorá sa prehraje vždy s nejakým zvukom. |
|
|
|
|
Env_mirror alebo zrkadlenie modelov Vocko Tutoril 24.04.2009 : 18:49:30
|
Tutoriál na zrkadlenie tu už je, ale èo ak chceme odráža i modely? Na tom nám poslúži entita env_mirror, ktorá sa nachádza iba v Spirite 1.4 alebo novšej verzii. |
|
|
HL2 : Obloukový prùchod R4z0r Tutoril 01.05.2008 : 05:48:46
|
Dnes si ukážeme zpùsob, jak vytvoøit elegantní obloukový prùchod, bez nutnosti používat øezání geometrie brushem... |
|
|
|
|
Pridanie mp3 do spiritu NICKSss Tutoril 02.03.2008 : 20:55:09
|
Návod na pridanie mp3 do Half-Life 1 alebo Spirt 1.2,otestované na verzii 1.2.
Asi už mate zbrane add-ons vo Spirite 1.2 a nechcete prejst na ver.1.4 lebo všetko stratite
pre Mp3... Na internete som našiel návody pre HL1 a po anglicky ktoré po skompilovani
fungovali asi takto : Aplikácia HL.EXE Neodpovedá... |
|
|
*locus Deli Tutoril 22.02.2008 : 20:13:47
|
Pre niektorých mapperov neznámy pojem, ale pre niektorých ve¾mi úèinná pomôcka.
Vïaka tomuto príspevku sa vám posnažím priblíži tajomstvá jednej z najväèších zbraní spiritu.
|
|
|
Spirit of Half-Life - Predstavenie Wizz Tutoril 27.10.2007 : 08:52:04
|
Predtým než sa pustíte do èítania, chcel by som Vás upozorni že èlánok už nemusí by 100% aktualny. Èlánok som totiž napísal ešte za svojich mladých èias - 13. júna 2004, èo je viac ako tri roky. Zverejni som sa ho rozhodol po nátlaku a výhražkach ostatných redaktorov |
|
|
|
Ako spraviť Otisa Wizz [13.03.2004 : 19:02:49] 98 Tutoril tan : 3771 Priemern znmka : 1.5 |
Ak ste hraly Opposing force, iste si pamätáte na takého milého, tučného policajta. Vydieť ste ho mohly aj v Blue Shift, ako sa na strelnici napcháva koláčom . Je to v podstate normálny policajt ako starý Barney. Takže pokial by ste ho chcely mať v hre, stačilo by mu len zmeniť MDL súbor. Ale pokiaľ chcete používať oboch, musíte si ho doprogramovať.
Teraz niečo ku OOP, alebo Objektovo Orientovanému Programovaniu. Tieto základy by Vám maly pomôcť pri začiatkoch programovania v HL, ale nielen tam. Pri OOP používame výrazi ako : trieda, objekt (v niektorej literatúre "instancia"), dedičnosť, ... Ale o čo vlastne ide ?
TRIEDA, je to vlastne typ, ktorý obsahuje definície premenných a funkcí, ktoré s týmito premennými pracujú. Každá trieda potom môže riešiť nejakú úlohu (napr. v HL je trieda "TalkMonster" ktorá sa stará o chod hovoriacich monstier ako vedec a barney).
Od každej triedy potom môžeme vytvoriť OBJEKT. Objekt používa všetky premenné a funkcie triedy, ku ktoréj patrí. Každá trieda môže mať X rôznych objektov (X je celé kladné číslo).
A dedičnosť. Pomocou dedičnosti môžeme vytvoriť novú triedu, ktorá zdedí všetky premenné a funkcie po už existujúcej triede (tzv. rodičovská trieda) + môžme pridať ďaľšie. Takto vytvorená trieda sa nazýva aj "potomok". Malý príklad. HL má nadefinovanú triedu TalkMonster, ktorá obsahuje základne hodnoty a funkcie pre hovoriace monstra v hre, ale neobsahuje priamo konkrétne data o súboroch s modelom, zvukmi, animáciami. Preto je vytvorená trieda Barney, ktorá bude potomkom triedy TalkMonster a bude definovať názov modelu ktorý sa má použiť, zvuky ktoré má rozprávať atď. Pritom základné data bude čerpať z triedy TalkMonster.
Od teórie teraz radšej préjdeme ku samotnéj tvorbe. Začnite s tým, že skopírujte súbory "otis.mdl", "otis01.mdl", otis02.mdl" a "otis03.mdl" do adresára "valve/models/" . Model Otisa môžete získať napr. z Opposing Force alebo Blue Shift.
Spustite VC++, otvorte HL SDK a chodte do súboru barney.cpp. Kúsok pod začiatkom súboru nájdete text :
class CBarney : public CTalkMonster |
Toto je zápis dedičnosti (je zvyk dávať na začiatok názvu triedy nejaké písmeno, v tomto prípade je to C). Za definíciou dedičnosti sa nachádza v zložených zátvorkách { } definícia premenných a funkcí, ktoré patria do tejto triedy. Pod ňou je ešte zápis funkcie LINK_ENTITY_TO_CLASS, ktorá určuje aká entita patrí ku tejto triede.
Pod ňu už pridáme vlastný kod :
class COtis : public CBarney
{
void Spawn( void );
void Precache( void );
void Killed( entvars_t *pevAttacker, int iGib );
int body;
};
LINK_ENTITY_TO_CLASS( monster_otis, COtis );
|
Vytvorily sme si triedu COtis, ktorá je potomkom triedy CBarney, teda sme zdedily aj jej všetky funkcie. Ale nie všetky potrebujeme v pôvodnej podobe, preto si niektoé musíme definovať sami (Spawn, Precache, Killed a premennú body). Posledný riadok určuje, že trieda COtis patrí ku entite monster_otis (tú si nakoniec pridáme do fgd súboru).
Teraz napíšeme samotné funkcie, takže :
void COtis :: Spawn()
{
Precache( );
SET_MODEL(ENT(pev), "models/otis.mdl");
UTIL_SetSize(pev, VEC_HUMAN_HULL_MIN, VEC_HUMAN_HULL_MAX);
pev->solid = SOLID_SLIDEBOX;
pev->movetype = MOVETYPE_STEP;
m_bloodColor = BLOOD_COLOR_RED;
pev->health = gSkillData.barneyHealth;
pev->view_ofs = Vector ( 0, 0, 50 );
m_flFieldOfView = VIEW_FIELD_WIDE;
m_MonsterState = MONSTERSTATE_NONE;
pev->body = 0; // pri nacitani nebude mat v ruke zbran
m_fGunDrawn = FALSE;
m_afCapability = bits_CAP_HEAR | bits_CAP_TURN_HEAD | bits_CAP_DOORS_GROUP;
MonsterInit();
SetUse( FollowerUse );
}
void COtis :: Precache()
{
PRECACHE_MODEL("models/otis.mdl");
PRECACHE_SOUND("barney/ba_attack1.wav" );
PRECACHE_SOUND("barney/ba_attack2.wav" );
PRECACHE_SOUND("barney/ba_pain1.wav");
PRECACHE_SOUND("barney/ba_pain2.wav");
PRECACHE_SOUND("barney/ba_pain3.wav");
PRECACHE_SOUND("barney/ba_die1.wav");
PRECACHE_SOUND("barney/ba_die2.wav");
PRECACHE_SOUND("barney/ba_die3.wav");
TalkInit();
CTalkMonster::Precache();
}
void COtis::Killed( entvars_t *pevAttacker, int iGib )
{
// zmena, inak by mal v ruke kolac
pev->body = 0;
Vector vecGunPos;
Vector vecGunAngles;
GetAttachment( 0, vecGunPos, vecGunAngles );
CBaseEntity *pGun = DropItem( "weapon_9mmhandgun", vecGunPos, vecGunAngles );
SetUse( NULL );
CTalkMonster::Killed( pevAttacker, iGib );
} |
Zaujimavosťou môže byť, že pokiaľ by sme nezmenilny funkciu Killed, mal by Otis po zabití v ruke kolač
skompilujte to, a vytvorenou knižnicou nahraďte pôvodnú hl.dll (tú si môžete aj zalohovať).
To je z programovéj stránky všetko.
Teraz otvorte súbor halflife.fgd, ktorý používa Váš editor na načítanie entít. Nájdite riadok :
@PointClass base(Monster,TalkMonster) size(-16 -16 0, 16 16 72) = monster_barney : "Barney" []
a pridajte pod neho :
@PointClass base(Monster,TalkMonster) size(-16 -16 0, 16 16 72) = monster_otis : "Otis" []
Teraz už môžete spustiť editor a do mapy vložiť entitu monster_otis. Keď mapu skompilujete, mal by sa tam objaviť Otis, ktorý sa bude chovať ako policajt ...
To je zatiaľ všetko, obdobným spôsobom sa dájú spraviť aj iné "príšery" ktoré zdedia funkcie po rodičovskéj triede, ale budú určite spestrením Vašeho MODu.
SBORY KU LNKU : | |
BODOVANIE LNKU Boduje sa ako v kole (1- vborn, 5-zl)
Priemern znmka : 1.5 Hlasovalo : 8
|
KOMENTRE KU LNKU Poet komentrov ku lnku : 3
1. hAssassin [07.12.2004-13:44] 570 | Zdravim,
koneènì sem sehnal C++ a zkoušel sem si pøidat Otisa.
Pøes poèáteèný nezdary se mi to povedlo!!!
Ale dìlal chyby: 1) neumìl bìhat - když sem mu øekl, aby sel za mnou a pak mu utekl, sekl se a nìjak se "vrtìl"
2) neumøel - když sem se ho pokusl zaít, místo animace pádu se zase vrtìl a pak z nìho vypadla pistole. Když sem do nìj støílel dál, tak z nìho pistole padala furt. Nakonec se seknul a dalo se zkrze nìj projít.
Musim pøiznat, že programovat umim akorát v Pascalu a JavaScriptu. V C++ sem dìlal úplnì poprvý, ale pøesto bych se chtìl zeptat, jestli by mi nemohl poradit...
Pøedem díky |
3. Vaber [17.12.2006-20:02] 2253 | Tak snad vytvoris novou tridu kterou odvodis od tridy normalniho vedce a pretizis fci Spawn().. Ja sem do HL1 vzivote nekodil (jen HL2), ale melo by pro snadnou zmenu modelu stacit hodit do novy fce spawn tohle:
BaseClass::Spawn();
SET_MODEL(ENT(pev), "models/novy_vedec_model.mdl");
ale nevim jak to reaguje na vic zmen modelu, mozna budes muset celou tu spawn fci opsat a nepouzit figl s BaseClass.. C++ coder | Pre pridvanie komentrov muste by prihlsen Pokia ete nieste zaregistrovan, mete tak urobi TU
|
|
|
|
|