[C&C 3: TW] Odcinek 5 - Kodowanie broni 568 0

O temacie

Autor WielkiKaszaniarz

Zaczęty 7.09.2015 roku

Wyświetleń 568

Odpowiedzi 0

WielkiKaszaniarz

WielkiKaszaniarz

Użytkownicy
posty35
Propsy7
Profesjabrak
  • Użytkownicy
Modding "Command & Conquer 3: Tiberium Wars" - Kodowanie broni

Spis treści

1) Cel i przygotowania
2) Modyfikacja istniejącej broni
3) Wskazówki, jak zakodować nową broń
4) Tworzenie moda i testowanie


Cel i przygotowania

Poprzednim razem było o pancerzu, tym razem będzie o uzbrojeniu. Bronie podzielone są na kilka typów: GUN, SNIPER, CANNON, GRENADE itp. W zależności od typu broni są obliczane redukcje obrażeń w parametrach pancerza. Jednakże każdy z tych typów obejmuje kilka/kilkanaście rodzajów broni, zdefiniowanych dla każdej jednostki z osobna. Dziś zmodyfikujesz broń Scrinów. Dam ci też kilka wskazówek, jak zakodować zupełnie nową broń (choć zapewne sam się zorientujesz na zasadzie analogii)
.
Chciałoby się skopiować plik znajdujący się tutaj:
MOD SDK/CnC3Xml/GlobalData/Weapon.xml. Nie radzę. Gdy modyfikowałem ten plik, po odpaleniu EALAModStudio wyskakują błędy krytyczne. Pewnie wielce szanowni państwo z EA musieli coś pomylić i nie wstawili jakiegoś znaku. Na szczęście mamy mod 'wzorcowy':

MOD SDK/Mods/SampleMod

Wchodzimy tam, potem w folder data i kopiujemy plik o nazwie SampleUpdatedWeapons.xml. Wklejamy do MOD SDK/Mods/TrainingMod/data/Global. Bleeeee, brzydka nazwa. Zmieniamy na Weapon. Adresujemy plik w mod.xml. Jeszcze skopiuj ten zepsuty plik od EA i wklej go na razie tam, gdzie ten właściwy (nadaj tej kopii nazwę Weapon 2), będziesz potrzebować fragmentów kodu:

MOD SDK/CnC3Xml/GlobalData/Weapon.xml

Ale spróbuj go zaadresować w mod.xml, to nogi powyrywam. Super. Jedziemy.


Modyfikacja istniejącej broni

Wcześniej kombinowaliśmy z GDI, potem z Nod, czas na Scrinów. Otwórz Notatnikiem Weapon. Wykasuj to wszystko:

Cytuj
   <WeaponTemplate
      id="ShadowMachineGunRangefinder"
      Name="ShadowMachineGunRangefinder"
      AttackRange="120"      
      LeechRangeWeapon="true"
      AcceptableAimDelta="45d"
      AntiMask="ANTI_GROUND"
      CanFireWhileMoving="true"
      FinishAttackOnceStarted="false"
       >
      <FiringDuration
         MinSeconds="1.0s"
         MaxSeconds="1.0s" />
   </WeaponTemplate>

   <WeaponTemplate
      id="NODShadowMachinePistol"
      Name="NODShadowMachinePistol"
      AttackRange="100.0"
      WeaponSpeed="999999.0"
      RadiusDamageAffects="ALLIES ENEMIES NEUTRALS"
      ClipSize="1"
      FireSound="NOD_ShadowSquad_WeaponFirePistol"
      FireFX="FX_NODRifleManFire"
      FireVeteranFX="FX_GDIRifleManFireHeroic"
      AcceptableAimDelta="10d"
      CanFireWhileMoving="true"
      >
      <FiringDuration
         MinSeconds="0.1s"
         MaxSeconds="0.1s" />
      <ClipReloadTime
         MinSeconds="0.45s"
         MaxSeconds="0.55s" />
      <Nuggets>
         <DamageNugget
            Damage="30.0"
            Radius="0.0"
            DamageType="SNIPER"
            DamageFXType="NOD_RIFLE"      
            DeathType="NORMAL">
         </DamageNugget>
      </Nuggets>
   </WeaponTemplate>

   <WeaponTemplate
      id="GDIElfWarriorSword"
      Name="GDIElfWarriorSword"
      AttackRange="12.0"
      MeleeWeapon="true">
      <FiringDuration
         MinSeconds="1.2s"
         MaxSeconds="1.2s"
      />
      <Nuggets>
         <DamageNugget
            Damage="1500.0"
            Radius="0.0"
            DamageType="MAGIC"
            DamageFXType="ALIEN_BUZZER"
            DeathType="NORMAL"
         />
      </Nuggets>      
   </WeaponTemplate>

W Weapon 2 znajdź id="AlienBuzzerWeapon" (podstawowa broń najbardziej podstawowej jednostki Scrinów). Skopiuj cały fragment kodu od <WeaponTemplate do </WeaponTemplate>

Tym razem nie powiem ci, na jakie wartości masz zmieniać, nie ma tak dobrze :P Omówię tylko od czego są poszczególne linijki (inne bronie mogą mieć tego więcej, ale nie da się omówić absolutnie wszystkiego
):

a) id="AlienBuzzerWeapon"
   Name="AlienBuzzerWeapon"

   Identyfikator i nazwa broni. Aby unikać komplikacji i nie wdawać się w niuanse, lepiej żeby obie te wartości były zawsze identyczne, w żaden sposób cię to nie ogranicza.

b) AttackRange="30.0"

   Zasięg ataku

c) AcceptableAimDelta="360d"

   Pole rażenia broni. W tym przypadku jednostka nie musi się obracać, by strzelać w bok czy do tyłu. Jak zmienisz np. na 180d, to będzie mogła strzelać w przód i na boki, ale jeśli cokolwiek znajdzie się za nią (albo 'z boku, ale nieco z tyłu', kumasz?), jednostka musi się obrócić.

d) FireSound="ALI_Buzzers_WeaponFire"

   Dźwięk wydawany podczas działania broni. Jak to zmieniać, opiszę innym razem.

e) CanFireWhileMoving="true"

   Jednostka może się ruszać i strzelać jednocześnie. Jak zmienisz na false, to będzie musiała się zatrzymać, by strzelać.

f) RadiusDamageAffects="ALLIES ENEMIES NEUTRALS"

   Jeśli broń ma zakodowane, że powoduje efekt promieniowania (odłamków, rykoszetów, skażenia etc.) w określonym obszarze wokół trafienia (kilka linijek niżej), to jednostki w najbliższym otoczeniu też odnoszą obrażenia. Tutaj mamy sytuację, gdzie elementy neutralne, wrogowie, a nawet własne jednostki mogą być poszkodowane. Jeśli chcesz na przykład, by tylko wrogowie i neutralni byli na tę 'radiację' narażeni, wykasuj ALLIES .

g) AntiMask="ANTI_GROUND ANTI_STRUCTURE" >

   Nie, nie chodzi o maskowanie, tylko przeciw czemu jest ta broń: tutaj działa na jednostki naziemne oraz budynki. Poniżej przykład z innej jednostki:
   AntiMask="ANTI_GROUND ANTI_AIRBORNE_VEHICLE ANTI_AIRBORNE_INFANTRY" -> czytaj: przeciw pojazdom naziemnym, pojazdom powietrznym, piechocie powietrznej (latająca za pomocą skrzydeł/plecaków rakietowych oraz spadochroniarze)

h) FiringDuration

   Częstotliwość strzału w sekundach. Jeśli MinSeconds i MaxSeconds mają różne wartości, to gra za każdym razem losuje wartość 'pomiędzy' (Mam nadzieję, że nie muszę tłumaczyć, czemu pierwsza wartość nie możele być większa od drugiej).
 Efekt uboczny takiego zabiegu: możliwy spadek wydajności przy 'spamowaniu' jednostkami.

i) DamageNugget

   Od góry: wartość obrażeń, promień radiacji (już zostańmy przy tej nazwie) oraz typ broni. Pozycja DamageFX zawiera odsyłacz do kodu, który ma odciążyć komputer od pewnych obliczeń w sytuacji, gdy kilka jednostek atakuje jedną i jednocześnie strzela. Wyjaśnienie po angielsku znajduje się na początku pliku MOD SDK/CnC3Xml/GlobalData/DamageFX.xml. Lepiej w to nie ingeruj, chyba że naprawdę ci się nudzi i lubisz się denerwować... .


Wskazówki, jak zakodować nową broń.

Kopiujesz kod istniejącej broni. Zmieniasz nazwę i identyfikator. Zmieniasz parametry tak jak podczas modyfikowania broni istniejącej. Nazwę broni wstawiasz do modyfikowanej / nowej jednostki (trzeba poszukać, najlepiej nazwą 'starej' broni)


Tworzenie moda i testowanie

Zbuduj moda (która to już wersja?) i standardowo odpal skirmisha.

UWAGA: Niech cię nie zdziwi sytuacja, w której zmienisz jakieś parametry broni, a po "wynalezieniu" ulepszenia będzie mniej skuteczna. Bronie 'zupgrade'owane' są kodowane OSOBNO i mają ODRĘBNY zapis - i w pliku Weapon.xml, i w kodzie jednostki. Nie wspominając już o definiowaniu upgrade'ów, ale o tym innym razem. To samo dotyczy pancerzy.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry