Jump to content

Een introductie in Sanny Builder


Recommended Posts

Geplaatst: (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: door JGuntherS

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.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...