Referensmanual - Textadv.se skriptspråk

Skapande av spel sker genom en utvecklingsmiljö och ett enkelt skriptspråk.

!Eftersom det här är en referensmanual - ingen guide - kan det vara svårt för ovana personer att förstå. Fråga gärna i forumet om du behöver hjälp.
!Dokumentet är under utveckling.
Programmerarens notis §Limit command, set limits in text-file like vars.
Programmerarens notis §Syn, cut, has.
Index
      Variabler
            Variabelnamn
            Ordning
      Aritmetik
            Textsträngar
            ID-namn
      Inventarium
      Block
            Tillgängliga block
                        look
                        setup
                        act
                        use
      Felmeddelanden
      Systemvariabler
                        [room]
                        [current]
                        [obj1] [obj2]
      Funktioner
      Operationer
                        title text
                        loc varname value
                        print
                        error
                        init
                        set
                        unset
                        alias
                        loc
                        rename
                        copy
                        restart
                        prevent rest
                        move
                        rand
                        inc
                        dec
                        stop
                        conversation
                        choice
                        say
                        kill
                        unvisit
      Flödeskontroll
                        if
                        else
                        elseif
                        end
                        and
                        or
                        ==
                        !=
                        <=
                        >=
                        >
                        <
                        islocation
                        isnotlocation
                        isset
                        notset
                        notowned
                        owned
      Loopar
                        while
      De 4 typerna av script-filer
            Konversationer
            Rum
            Global
            Inventarium
      Att göra

Variabler

En variabel är ett namn som innehåller ett värde. Variabler kan:

1) skrivas ut som en del i ett textstycke (se operation print).

2) jämföras med värden och varandra (se Flödeskontroll).

3) ställas in till olika värden.

Se nyckelordet unset för mer hur variabler beter sig.

När värdet av en variabel ska användas i ett sammanhang används §.

Exempel
set color gul
print apelsinen är §color§

En variabels värde kan används i set-kommandot.

Exempel
set color blue
set color2 §color§
print §color2§

#Ovansåtende skriver ut blue
#OBS! Nedanstående sätter color2 till color, och inte till blue.
#Namnet color tolkas inte som en variabel om inte § används i sammanhanget.

set color blue
set color2 color
print §color2§

Men i if-satser används inte §§.

Exempel
set color2 blue
if color2 == blue
    print §color2§
end

Variabelnamn

Ett variabelnamn får bara innehålla bokstäver, siffror, understräck, och bindesträck.

Ett variabelnamn kan även innehålla de flesta andra karaktärer som parantes och punkt, men aldrig blanksteg.

Ordning

Lokala variabler override globala,.

Functions-variabler override lokala och globala.

Programmerarens notis §Egentligen ska inte funktionskod nå rums-lokala variabler, men de gör det för tillfället, vilket är fel.

Aritmetik

Programmerarens notis §Inte implementerat.

Textsträngar

En variabel kan sättas till en textsträng. Textsträngen anges då i slutet och inga citatstecken behövs.

Exempel
set min_variabel Resten av den här texten räknas som textsträng och läggs in i variabeln.

Följande fungerar på samma sätt.

Exempel
set min_variabel "Resten av den här texten räknas som textsträng och läggs in i variabeln."

Citatstecken ska användas om ett objekt innehåller flera ord med mellanslag i.

Exempel
set var "min variabel"

ID-namn

Rum och konversationer har id-namn och de används i scriptkoden.

Exempel
move mitt_rum1

Ovanstående kommando move flyttar spelaren till rummet med id-namn mitt_rum1.

När du redigerar ett rum finns en ruta där rummets id-namn står.

Inventarium

Objekt som spelaren får genom spelet och bär med sig. Kan användas på andra objekt i spelet.

Du ställer in inventarium genom att hantera särskilda variabler. Här läggs objektet vatten till.

Exempel
set inv.vatten
set inv.vatten.short med sand i
set inv.vatten.prop (water)

Inv. Vatten. Prop står för vattnets egenskaper, se nyckelordet define.

Och du raderar dem med unset.

Exempel
unset inv.vatten

Enbart inv. Vatten behöver raderas så försvinner. Short, och. Properties också.

Flytta ett objekt till inventarium med rename-kommandot.

Block

Scriptkod placeras i block och anropas därefter av systemet beroende på omständigheter.

Ett block börjar med ett blocknamn, och slutar med end.

Exempel
act bok
   print Det är en tjock bok.
end

Ovanstående block skriver ut print-texten när spelaren skriver se boken.

Flödeskontroll kan användas i alla block.

Tillgängliga block

Kör kod för det aktuella rummet.

Körs när spelaren första gången startar spelet (set-kommandot körs), eller när reset-kommandot körs.

Använd det här blocket för att initiera variabler som behöver finnas precis från början i spelet.

I spelet: tala.

Exempel
act tavla
   det är en fin tavla.
end
Exempel
act knapp
   du trycker på knappen
end
Exempel
use bok häst
   print Boken är skriven på hästspråk och hästen läser den flytande.
end
Exempel
use bok eld
   print Du vill inte kasta boken i elden. Boken kan vara bra att ha.
end

Felmeddelanden

Default error,.

Fundamental action error.

Systemvariabler

Variabler som har speciella förinställda värden.

Används i variabelnamn, representerar det nuvarande rummet.

Om rummet är rum1 ger [room]ljus ett variabelnamn som heter rum1ljus.

Bra i global kod som behöver definiera rumspecifika variabler.

Programmerarens notis §[room] översätts inte i print-kommandot.
Programmerarens notis §I loopar.
Programmerarens notis §Generella objektegenskaper.

Funktioner

Funktioner skapas i global-filen.

Exempel
funktionsnamn
    funktionskod
end

Anropas genom call.

Exempel
call funktionsnamn

Kan anropas från överallt där kod körs.

Funktioner stödjer argument.

Exempel
funktionsnamn arg1 arg2
    skriv ut §arg1§ och §arg2§
end
!Om du vill skicka värdet av en variabel gör call f §var§, om du vill skicka variabelnamnet gör call f var.

Anropas såhär.

Exempel
call funktionsnamn mittarg1 mittarg2

Mittarg1 kan vara en variabel eller textrad,.

Textrader omges med "".

Programmerarens notis §Textrader med "" stödjs inte just nu, (fix scriptreader!).
Programmerarens notis §Funktionsvariabler sparas i variables, men raderas efter funktionsanropet.

Operationer

!Ett kommando reagerar inte när spelaren skriver in det, om inte ordet finns synlig (deklarerat med word-operationen).

Ange # i början, som då betyder att textraden är kommentar och ignoreras av spelet.

title textsträng

Sätt en titel för det aktuella rummet.

loc variabelnamn värde

Variables local to the current room.

print textsträng

Skriver ut en text för spelaren. Om inget anges på en kod-rad, då tolkas det som ett print-kommando.

Exempel
look
    print hej
end

Ovanstående skriver ut hej, precis som nedanstående.

Exempel
look
    hej
end

För att skriva ut variabler i texten:

Exempel
print min text med §min_variabel§

Använd %objekt=text i spelet%.

Använd %go riktning=text i spelet%.

Exempel
Du är i en gammal skog och en %pinne=pinne ligger på marken%, en %go v=stig leder åt väst%

Ovanstående skriver ut klickbar text i spelet.

Exempel
look
   title Mitt rum
   print Här är det fint.
end
Programmerarens notis §Error {1 | 2}.

Forcerar ett felmeddelande av antingen kategori 1 eller 2.

init variabelnamn [{{värde | textsträng} | {värde | "textsträng"} limit {värde | "textsträng"} [{värde | "textsträng"} ...]}]

Initierar ett värde i en variabel om det inte redan är satt. Annars påverkas inte variabeln.

!Om variabeln raderas med %unset% kommer init att initiera variablen igen om init körs.
Programmerarens notis §Ta bort init och betona %setup%-blocket. Punktförkortning funkar inte.
Programmerarens notis §Limit-kommandot.
set variabelnamn [{{värde | textsträng} | {värde | "textsträng"} limit {värde | "textsträng"} [{värde | "textsträng"} ...]}]
[.variabelnamn-ändelse -||-]
[.variabelnamn-ändelse2 -||-]
...

Uppmärksamma att citatstecken behövs inte runt textsträngen om limit-delen ej används.

Sätter varname till value.

Limit-tillägg kan användas.

Exempel
set varname value1 limit value1 value2

Ovanstående begränsar variabeln till att enbart innehålla value1 och value2.

Programmerarens notis §Förklara limit-kommandot.

Förenklat syntax för att sätta flera värden.

Exempel
set forest.väska
    .pf väskan
    .state open

Om raden inleds med punkt refererar det till det senaste namnet som blev satt. Resultatet ovan för. pf blir samma som ex:

Exempel
set forest.väska.pf väskan
unset variabelnamn

Tar bort variabeln variable_name helt från systemet.

tar bort alla variabler namngivna med punkt efter ursprungsnamnet:

Exempel
	set forest hej
	set forest.var1.a x
	set forest.var1.b x
	set forest.var1.c.a x
	set forestx

	clear forest

Alla variabler tas bort utan forestx.

Syftet är att underlätta hantering av grupperade variabler.

Unset raderar även det som sätts med limit i set.

alias [variabelnamn | textsträng] förkortning

Gör förkortningar möjliga.

Exempel
alias forest.box.state fbs
if fbs == open
   # ...
end

Förkortningarna är lokala till den aktuella kod-filen.

Aliaskommandot måste vara angivet innan den kod som använder den aktuella förkortningen.

Ange alla aliaskommandon längst upp i filen, förslagsvis.

Fungerar i alla kod-filer.

Fungerar även att göra förkortningar / alias för vanliga textrader.

Exempel
alias "%box=en grön box%" box

Efter ovanstående rad ersätts all användning av box i vanlig text med det som står inom citatstecken. Glöm inte citatstecken.

loc variabelnamn värde

Sätter en rums-lokal variabel.

Exempel
loc door_is_open true

Local variables override globals.

Programmerarens notis §limit fungerar inte med loc som i set, och init.
Programmerarens notis §Limit-kommandot.
rename gammalt-variabelnamn nytt-variabelnamn

Ändra namn på en variabler och alla dess undervariabler.

Programmerarens notis §Funkar inte på lokala variabler, mellan lokala, och från lokal till global.
Exempel
rename box1 box2

Ovanstående döper om, men om box1 har box1. Text kommer den att flyttas till box2. Text.

copy variabelnamn nytt-variabelnamn

Samma som rename men en originalet bevaras.

restart

Nollställer allt, precis som om spelaren började på spelet från början.

prevent rest

Prevent global from room-code, prevent room and global from inventory.

Stoppar även generell egenskapskod ex. (container).

move rum-id

Flytta spelaren till rumemt room_id.

Programmerarens notis §This prints the default error if no action is programmed for the command, this does not controle the action-error checking like if the right objects exists.
rand variabelnamn nummer1 nummer2

Sätter variabeln var till ett slumptal mellan num1 och num2.

Exempel
rand mitt_slump_tal 1 10
inc variabelnamn

Ökar värdet i var med 1.

dec variabelnamn

Minskar värdet i val med 1.

stop

Stoppar programflödet för det aktuella blocket.

conversation conversation-id

Anropa en konversation med id conv.

choice nummer textsträng

Används i konversations-kod, och representerar ett tillgängligt val.

say nummer

Inledning på det block som choice med samma nummer leder till.

kill

Avsluta konversationen.

unvisit rum-id

Ej implementerad. Systemet mins vilka rum du vart i och skriver ut rummets namn i rutan Riktningar. Operationen ränsar den beskrivningen för rummet room_id.

Flödeskontroll

En hel if-sats:

if {uttryck | flera-uttryck}
[programkod]
[
[elseif {uttryck2 | flera-uttryck2}]
[programkod2]
...
]
end

I ovanstående syntax-definition nämns flera-uttryck, och uttryck. De beskrivs:

flera-uttryck:

uttryck [{and | or} uttryck2 ...]

Satsen flera-uttryck bygger på uttryck som beskrivs:

uttryck:

värde [{== | != | <= | >= | < | >} {variabelnamn | värde | textsträng}]

Eller uttryck:

värde [{islocation | isnotlocation | isset | notset | notowned | owned}]

Variabeln är satt.

Variabeln är inte satt.

Du äger inte objektet i inventarium.

Du äger objektet i inventarium.

Exempel
if var1 == 2
   print var1 är satt till 2
end

If kan anges med enbart en variabel.

Exempel
if var1
   print var1 är satt
end

Är sant om var1 är satt (med set, eller init, och clear tar bort en variabel).

Notset fungerar såhär (liksom notowned, och owned).

Exempel
if var1 notset
   print var1 är inte satt
end

Loopar

while {uttryck | flera-uttryck}
[programkod]
end
Exempel
set val 1
while val < 10
    Detta är varv §val§
    inc val
end
Programmerarens notis §Loopar är relativt begränsade till x antal varv, beroende på att systemkoden är lite slö och behöver optimeras.
Programmerarens notis §Looparna har förbättrats avsevrät. Testa mät igen.

De 4 typerna av script-filer

Kod i rum-filen körs först, sedan global, och sist inventarium. Konversationsfiler körs bara när en konversation är igång.

Konversationer

Kod för konversationer. Se kommandot ed conv.

Rum

Kod för ett speciellt rum. Se kommandot ed room.

Global

Global kod som kan nås från alla rum. Se kommandot ed glo.

Inventarium

Sådant som rör ditt inventarium, nås från alla rum. Se kommandot ed inv.

Att göra

Planeringar som eventuellt återstår att verkställa.

Programmerarens notis §Islocation != [room] non concistensy, find islocation in code. And special var [room].
Programmerarens notis §Need enter_room block?.
Programmerarens notis §Mark visited, needed?.
Programmerarens notis §Foreach with regex syntax on variables and [current], - not needed.
Programmerarens notis §Write about general properties.
Programmerarens notis §String functions like stradd, replace,.
Programmerarens notis §Warning for if var val, when it should be if var == val.
Programmerarens notis §Ta bort keywords.
Programmerarens notis §When we run reset the setup script runns twice.
Programmerarens notis §Define removed, removed any code?.
Programmerarens notis §Skriv om speciella inv-värden (short etc).
Programmerarens notis §Syntax för punktförkortning.
Programmerarens notis §Short for directions removed / paths.
Programmerarens notis §Return true false removed.
Programmerarens notis §Warning on this? set x aa limit a b c.
Programmerarens notis §Set ide, gör så att spelaren kan se lista över rum, conv limits etc vid sidan. Edit game mode.
Programmerarens notis §Exchange eregi preg_match.
Programmerarens notis §Have a block with end and a foreach without end, and code will fail, need better missing-end-warning.
Programmerarens notis §§[key]§ is no sysvar, it should not need §§, or just have §key§, make real sysvar of it, have it react on replace_sys_vars (set the val in a __sys_loop and link it to replace_sys_vars).
Programmerarens notis §We should clear local variables at the end of the local scope, but not so that they do not show up in var-dump.
Programmerarens notis §[] => in vars happen if you just run set without anything else.
Programmerarens notis §If you want two well-object with diffirent prop in diff rooms, then do room1. Well, room2. Well, and then in look do syn room1. Well well, syn room2. Well well in each room.
Programmerarens notis §Need to be able to do act [room]. Stone for example.
Programmerarens notis §Have warning for when we do copy "" x or reverse. Will result in all copied.