JGuntherS Geplaatst: 22 maart 2006 Rapport Geplaatst: 22 maart 2006 (bewerkt) Een introductie in Sanny Builder Voor de gevorderde SCM'er! Om het leven voor iedere SCM-modder wat aangenamer en gemakkelijker te maken, wil ik graag Sanny Buider van Seemann introduceren (kortweg Sanny). Sanny vind ik persoonlijk een erg handige compiler, je hoeft bijvoorbeeld niet meer zoals bij MB met die pond-tekentjes te gaan rotzooien, dat is hier gewoon gevangen door een '@' voor het label. En de lokale variabelen hebben een '@' achter hun cijfer inplaats van ervoor. De commentaren doe je in Sanny met // ipv ;;. Bepaalde "standaard" opcodes hoef je niet meer te schrijven, voor wait hoef je bijvoorbeeld geen 0001 meer te schrijven. Ook hoef je de opcodes van wiskundige commando's niet meer in te voeren, zolang je gebruikt maakt van "var...end"-blokken. Een voorbeeld van zo'n blok is: var $PLAYER_CHAR: Player $IntVar: Integer $Actor3: Actor $FloatVar: Float $MarkerArray: array 20 of Marker 1@: Car end Zoals je ziet, zijn er ook verschillende "classes" (klassen) in Sanny. Voorbeelden daarvan zijn Player en Actor. Met die classes kun je dan bijvoorbeeld actor-specifieke makkelijker. Een voorbeeld: var $Car1: Car end $Car1.Angle = 3.0 Car.Angle($Car1) = 3.0 Beide opcodes hebben hetzelfde effect. Maar denk nu niet dat je geen enkele opcode meer hoeft te schrijven, nog niet alle opcodes zijn opgenomen in het classes-systeem. Ook zijn er array's in Sanny. Zo kun je bijvoorbeeld vele auto's in 1 variabele stoppen. Om de array's te volste te kunnen benutten zijn er ook "for"-blokken in Sanny. De "gewone" programmeurs onder jullie weten wel wat dat zijn. Een voorbeeld ervan: var $Counter: Integer $CarArray: array 10 of Car end for $Counter = 0 to 10 $CarArray[$Counter].Angle = 67.0 end Let op: De arraypointers (de stukjes tussen de haken ([])) mogen alleen lokale of globale variabelen zijn! Sanny heeft ook IF-THEN-ELSE-END-blokken, zodat je zelf al die jumps niet meer hoeft te typen. Een voorbeeld: if and // of if or, als je het in "of"-verband wilt uitvoeren wasted_or_busted $Actor.Dead then fade 0 100 else $PLAYER_CHAR.ClearWantedLevel end Sanny heeft nog meer mogelijkheden, zoals de alloc-functie. Met de alloc-functie kun je aan variabeles een geheugenadres toewijzen. Dit is erg handig als je je SCM wilt laten communiceren met een "los" programma, zoals een trainer of een multiplayer mod (SA:2P). Een voorbeeld van de alloc-functie: var $PlayerChar: Player end alloc($PlayerChar, 1) // playerchar op geheugenadres 1 zetten $PlayerChar.Money += 10 Player($1).Money += 20 // DMA werkt nu ook, playerchar is immers op geheugenadres 1 gesteld Om het de MB-gebruikers makkelijk te maken heeft Sanny een convertor (Tools -> Convert 2 SB) aan boord, maar dan krijg je geen "native"-Sanny-formaat. Het beste kun je het zelf overzetten naar Sanny-formaat en gelijk alle variabeles in "var...end"-blokken zetten. Om echt alle mogelijkheden uit te proberen, zul je zelf met Sanny moeten gaan werken. Veel succes. Waarschuwing: De voorbeelden in deze post zijn niet bedoeld om gebruikt te worden: a) ze slaan nergens op en b) ik kan er typfouten in hebben gemaakt, waardoor je allemaal vage fouten krijgt. Bewerkt: 26 maart 2006 door JGuntherS Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.