Kebmans blogg

Arma 3: Fyll bensin på ditt helikopter

Posted in Data, Programmering, Scripting, Spill by kebman on 28/09/2013

En enkel oppskrift på hvordan kode fylling av drivstoff på ditt helikopter i Arma 3.

Forhåndskunnskaper: Du må minimum kunne plassere objekter ved hjelp av editoren i spillet. Hvis du ikke kan det enda, se her: http://www.youtube.com/watch?v=oN8s58xEi0k
Ellers er prosessen forklart veldig nøye. Teskje-metoden here we come! 😀

Oppskrift

Åpne opp kartet du har lyst å jobbe med og plasser enten en player eller et helikopter som du gjør til player.
Gi helikopteret navnet myHeli. Lagre kartet med Mission Name «Trigger» og som User Mission.

Plasser så en trigger (finnes under flagg-ikonet).
Sett størrelsen slik at det passer med landingsplassen din.
Pass også på at den er satt til Repeatedly og at enten din gruppe, eller alle, kan trigge den.
Repeatedly betyr ganske enkelt at du kan bruke triggeren til å fylle bensin så mange ganger du måtte ønske.

I boksen Condition, skriv følgende kode:

({getPosATL _x select 2 < 0.1} count thisList) > 0 && fuel myHeli < 0.9;

Forklaring av koden

Den første delen av koden gjør at triggeren kun fyrer av om helikopteret er under 0,1 meter over bakken (Merk: i USA bruker de punktum for å skille mellom desimaler, mens vi bruker komma her i Norge).
Den andre delen av koden (etter &&) gjør at triggeren kun fyrer av om helikoptere har under 90 prosent drivstoff i tanken.

getPosATL finner plassering og høyde over land. Det kommer som en array _x bestående av posisjonskoordinatene 0=X, 1=Y og 2=Z.
Vi er selvsagt bare interessert i høydevektoren Z, derfor står select 2 der.
For at det ikke skal fylles drivstoff før helikopteret står på bakken, vil ikke «listen» bli telt som 1 før høyden er under 0,1 meter over land.

I tillegg vil ikke triggeren skyte av før helikopteret har under 90 prosent drivstoff.
&& står simpelten for en logisk «og», som betyr at begge delene av kondisjonalen må være sann før triggeren fyrer av. Det holder ikke at bare én av dem er det.

I boksen On Act (On Activation), skriv følgende kode:

nul = [] execVM "fuel.sqf";

Forklaring til koden

Dette lager en null-array, fordi det av en eller annen grunn kun kan kjøres fra en sånn… Og execVM kjører ganske enkelt filen fuel.sqf.

Denne filen finnes naturlig nok ikke enda, derfor er det på tide at du starter opp din beste tekst-editor (Notepad++, f.eks., men vanlig Notisblokk funker også).

I tekst-editoren, skriv inn følgende skript:

heliFuel = fuel myHeli;
addFuel = 0.1;
while {heliFuel < 1.0} do {
     myHeli setfuel heliFuel + addFuel;
     addFuel = addFuel + 0.1;
     sleep 0.2;
};

Lagre skriptet som fuel.sqf i mission-folderen. Denne ligger vanligvis på C:\Users\DittBrukernavn\Documents\Arma 3\missions\Trigger.Map . I alle fall gjelder det Windows 7
For alt jeg vet har du den på D-disken. Bytt i så fall C: ut med D:. DittBrukernavn bytter du selvfølgelig med ditt brukernavn.
.Map er det kartet du har valgte, enten Stratis, Altis eller et annet kart.

Forklaring av skriptet

heliFuel = fuel myHeli lagrer simpelten hvor mye drivstoff helikopteret har igjen i tanken i variabelen heliFuel.
addFuel lagrer hvor mye som skal fylles hver gang skriptet slår en ny løkke. Det definerer altså hvor fort tanken fylles opp. Jo høyere tall, jo fortere går det, men det er ingen grunn til å sette tallet over 1, siden 1 er normalisert til å bety «full tank».
while-løkken kjører så lenge det er plass til mer drivstoff i tanken (så lenge heliFuel er under 1), men ikke noe mer enn det.
Inni while-løkken, legger setfuel ganske enkelt den eksisterende mengden drivstoff (heliFuel) sammen med ny mengde drivstoff (addFuel).
sleep pauser ganske enkelt løkken så mange sekunder det er angitt (0,2 sekunder i dette tilfellet).

Som du ser er det et ganske lite skript. Kanskje tenker du da at det kunne vært i kondisjonal-feltet i triggeren. Grunnen til at det ikke kan være der, er fordi triggeren ikke godtar pauser. Det er kun mulig i eksterne skript, derfor trenger det å være i sin egen fil.

Valgfritt

Om du vil at det skal se ekstra bra ut, plasser også ut et helipad-objekt under triggeren fra Empty > Objects (Signs).
Det er nemlig litt lettere å finne igjen trigger-området i spillet om du også har en synlig landingsplass assosisert med den. 😉

SMPTE-synkronisering på GitHub

Posted in Data, Filmredigering, Internett, Programmering, Programvare, Scripting, Teknologi, Video by kebman on 13/05/2013

Endelig har jeg oppdaget GitHub og lagt ut mitt første prosjekt der. Driver på med et videoprosjekt nå, men jeg fikk noen problemer med SMPTE-koder (tidskoder for video) som ikke stemte med hverandre da jeg logget. Først sjekket jeg ut noen programmer, men de dugde ikke, så da bare satte jeg i gang å lage min egen kode.

Sjekk det ut her: https://github.com/kebman/Simple-SMPTE-class-in-PHP

Klipping: Hvorfor bruke jump-cuts

Posted in Effekt, Filmredigering, Spesialeffekter by kebman on 29/05/2012

En artikkel om grunner til å bruke, og ikke bruke, jump-cuts innen filmklipping og videoredigering.

KlapperDen vanlige definisjonen på et jump-cut er et lite hopp i tid innenfor samme billedutsnitt.

Eksempel: En person filmet i halvtotal røyker. I neste klipp er personen i samme halvtotale utsnitt, men har sluttet å røyke. Det blir altså et brått hopp fra at personen sitter og røyker, til at han plutselig ikke røyker lenger.

Fremmedgjøring

Det påstås at Jump-cut kan gjøre at tilskuerne blir gjort oppmerksom på at de ser på film. De blir så å si «fremmedgjort» fra handlingen (jfr. «verfremdungsteknik» av Bertholt Brecht). Det kan dermed brukes til å få frem et meta-perspektiv1 hvor tilskuerne både er bevisst på handlingen, men også og at det er film de ser på.

Dokumentarfilm

Særlig innen dokumentarfilm er dette mye brukt, ikke så mye for å gjøre tilskuerne oppmerksom på meta-aspektet, men mer av rent praktiske årsaker, for å korte ned tid, f.eks om et intervjuobjekt må tenke seg om før han svarer, brukes gjerne et jump-cut for å fjerne denne betenkningstiden slik at intervjuobjektet fortere kommer til saken.

I tillegg kan det tenkes at jump-cuts gir dokumentaren mer autentisitet, og at det dermed gir mer autoritet til dokumentarens sannhetsgestalt. Rasjonalet for å bruke jump-cuts innen dokumentarfilm er rett og slett at tilskuerene får mer tiltro til det de ser, fordi de vet at filmskaperen ikke prøver å lure dem med å skjule klipp, slik en fiksjonsfilm ville gjort. På den annen side er det likevel estiske grunner til å ikke bruke jump-cuts innen dokumentarfilm, f.eks at det rykker opp flyt (flow) og at det dermed kan virke stygt eller forstyrrende.

Fiksjonsfilm

Jump-cuts får en ny dimensjon innen fiksjonsfilm, og de trenger slett ikke fremmedgjøre tilskueren slik det gjøres i dokumentarfilm. Istedenfor kan kan jump-cuts brukes som et virkemiddel for å portrettere karakterens følelsesliv her, f.eks. som en effektiv fortellerteknikk for å vise at karakteren er veldig stresset, frustrert, krakilsk, eller rett og slett ikke har helt kontroll over sitt eget sinn eller egen forståelse for tid. Se f.eks for deg en karakter som i ett klipp skjelvende tar et trekk av en sigarett. I neste prøver han febrilsk å tenne på sigaretten. Og i det tredje klippet blåser han rolig ut en stor sky av røyk. Åpenbart er denne personen i en krisesituasjon av ett eller annet slag, før han endelig klarer å roe seg litt mer ned.

Jump-cuts kan også brukes til å portrettere kjedsommhet, eller frustrasjon over at ting går for tregt.

Her er et konkret eksempel:

Se spesielt på hvordan jump-cuts sammen med klipperytmen her effektivt forteller hvordan karakteren er i en særdeles stressende og beklemt situasjon.

Noter

1 Meta-perspektiv innen film: I ordboken betyr meta bakenforliggende eller det som er under overflaten. Meta-persketiv innen film er rett og slett at tilskueren blir gjort bevisst på bakenforliggende eller underliggende forhold ved filmen, f.eks. at de blir rykket ut av handlingen og blir gjort bevisst på filmteknikniske effekter. Istedenfor å la seg lulle inn i fortellingen, blir altså tilskueren bevisst på at han ser film, og får dermed sjansen tl å gjøre seg dypere tanker rundt det som blir fortalt.