niedziela, 20 września 2015

Zaczynamy modować grę!

Czołem!

Mój poprzedni post został całkiem nieźle odebrany. Cieszę się z tego powodu, bo motywuje to mnie do pracy. Przedstawiłem tam również sposób na usunięcie bonusów. Teraz jednak zajmę się czymś trudnym. MODDING! Co to jest do cholery? Jest to sposób na modyfikowanie pewnych zachowań gry z celu uzyskania pożądanych efektów. Nie jestem w tym ekspertem, bo część rzeczy zmieniam na chłopski rozum. Zanim zaczniesz modować, miej na uwadze, że:
  • Mody w społeczności BombSquada nie występują. Stworzysz jakiegoś? Podziel się w internecie!
  • Mod nie musi być koniecznie modyfikacja kodu. Moja paczka z TF2 też jest modyfikacją. Jedyna różnica co to, że ciągle możemy korzystać z zawartości sieciowej.
  • Zabierając się za kod trzeba uważać. Mały błąd może nie być pokazany w grze, chyba, że użyjemy konsoli, która jest ukryta pod przyciskiem ` (pod ESC).
  • Przed zmienianiem czegokolwiek z gry warto zrobić kopię zapasową tych plików, by nie instalować BombSquada na nowo.
  • Jeśli mod nie działa, zapewne trzeba zmienić w Opcje, Zaawansowane, Włącz lokalne pakiety modów. 
  • By ułatwić dostęp do folderu z modami, gdzie dodamy własne tryby gry lub wklejamy wyedytowane pliki, należy wejść w Opcje, Zaawansowane, Pokaż katalog modów.
  • Należy pamiętać, że mieszanie w kodzie, czy mody dodające tryby kooperacyjne, zablokuje tryb turniejowy. Po zakończonej zabawie trzeba pozmieniać pliki i wsadzić do folderu, gdzie będą bezpieczne.
Dosyć gadania. Czas na gwóźdź programu!

Odblokuj wszystkie postacie bez wydawania kuponów

Przydatność: **
Trudność: **
Chcesz odblokować bałwana? Mikołaja? A może całą paczkę? Ta modyfikacja miesza w kodzie gry, przez co gra nie będzie wykrywała czy masz kupione postacie, tylko od razu je udostępni.
  • Wejdź w folder data, scripts
  • Znajdź folder bsSpaz.py i otwórz go z Notepad++
  • Poszukaj takiej liniki:
def getAppearances():
    import bsInternal
    disallowed = []
    # hmm yeah this will be tough for people to hack ;-)
    if not bsInternal._getPurchased('characters.santa'): disallowed.append('Santa Claus')
    if not bsInternal._getPurchased('characters.frosty'): disallowed.append('Frosty')
    if not bsInternal._getPurchased('characters.bones'): disallowed.append('Bones')
    if not bsInternal._getPurchased('characters.bernard'): disallowed.append('Bernard')
    return [s for s in appearances.keys() if s not in disallowed]
WOW. Eric wie, że chcemy odblokować sobie postacie. Mniejsza z tym. Kto zna angielski już wie, które liniki służą jako sprawdzanie, czy zakupiłeś postać. Linika 5 tłumaczy następująco:
Jeśli Mikołaj na aktywnym koncie nie jest kupiony, nie pozwalaj na grę nim.
Proste, prawda? Wystarczy usunąć liniki podobne do  if not bsInternal._getPurchased('characters.santa'): disallowed.append('Santa Claus') i problem z głowy.
Ostateczny produkt wygląda tak:
def getAppearances():
    import bsInternal
    disallowed = []
    # hmm yeah this will be tough for people to hack ;-)
    return [s for s in appearances.keys() if s not in disallowed]
  • Zapisz skrypt
Teraz wystarczy uruchomić grę i zobaczyć czy działa. Nawet poprawne wykonanie może liczyć się jako porażka. Nie wiadomo, czy załatano to w najnowszej wersji. U mnie zadziałało za pierwszym razem, jednak po przywróceniu i ponownej modyfikacji, nie dało się odblokować postaci. Dlatego trudność jest podwyższona o jedną gwiazdkę. Teraz jakoś mam farta. Oto dowód:

Zmiana ilości życia postaci

Przydatność: *
Trudność: *
Kolejna rzecz jaką można zrobić w grze competetive. Zmiana ilości życia graczy. Mniej wymusi na dobre manewrowanie. Więcej pozwoli tankować obrażenia.
  • Otwórz folder data, scripts
  • Edytuj plik bsSpaz.py
  • Poszukaj takiej liniki (numer 374 w Notepad++)
        self.hitPoints = 1000
        self.hitPointsMax = 1000
Tutaj już wiesz co zrobić. Zmień wartości na takie, jakie chcesz. Mój przykład
        self.hitPoints = 850
        self.hitPointsMax = 1250
Tutaj postać po respawnie będzie miała 850 punktów życia. Wystarczająco, by ją zabić dobrze rzuconą bombą. Zebranie apteczki sprawi, że będzie miała więcej punktów życia niż na starcie. Takie buty!


Zmiana zasięgu wybuchu bomb i typu wybuchu

Przydatność: ***
Trudność: ***
Chcesz poćwiczyć celność? A może zmniejszyć zasięg, by dać pole do popisu profesjonalistom? Tutaj to jest to możliwe modyfikując jeden plik.
  • Otwórz folder data, scripts
  • Edytuj plik bsBomb.py
  • Poszukaj takiej liniki (numer 249 w Notepad++)
def __init__(self,position=(0,1,0),velocity=(0,0,0),blastRadius=2.0,blastType="normal",sourcePlayer=None,hitType='explosion',hitSubType='normal'):
Tutaj można zmienić aż trzy rzeczy. Typ wybuchu, zasięg oraz pozycja wybuchu (wygląda komicznie, jak wybuch jest nie z bomby tylko poza nią). Jak chcę zwiększyć zasięg do kosmicznych wartości, zmieniam blastRadius na inną liczbę. Oto jak to będzie wyglądać:
def __init__(self,position=(0,1,0),velocity=(0,0,0),blastRadius=10.0,blastType="normal",sourcePlayer=None,hitType='explosion',hitSubType='normal'):
A teraz zmienię co innego. Dam, by zwykłe bomby były mrożące. Heh!
def __init__(self,position=(0,1,0),velocity=(0,0,0),blastRadius=2.0,blastType="ice",sourcePlayer=None,hitType='explosion',hitSubType='normal'):
A teraz coś jeszcze innego. Sprawię, by wybuch był wyżej niż bomba!
def __init__(self,position=(0,4,0),velocity=(0,0,0),blastRadius=2.0,blastType="normal",sourcePlayer=None,hitType='explosion',hitSubType='normal'):
  • Zapisz plik. Nuff said.
I to już koniec poradnika! Zauważyliście coś? Jak edytuję Spaza, idę do bsSpaz, jak edytuję bombę, idę do bsBomb.py. Mając to na uwadze można łatwo edytować tryby gry, opcje do wyboru i tak dalej. W następnym poradniku opiszę dodawanie wariacji istniejących trybów gry. Na razie jednak trzymajcie się ciepło. Narka!

1 komentarz: