Tut: Hoe laat je de speler zijn eigen speler ontwerpen?
Game maker versie: 7.0 pro (Waarschijnlijk ook lager)
Moeilijkheidsgraad: Gemiddeld (basiskennis gml vereist)
Duur: Gemiddeld (hangt af van kennis)
Example: Bijgeleverd

Structuur in beeld:
1. Inleiding

2. Uitvoering
	1. We maken de sprites.
		-Sprites voor de kleren
		-Sprites voor de knoppen

	2. We laten de gebruiker zijn kleren kiezen.
		-Variables aanmaken
		-Type aanpassen a.d.h.v. knoppen
		-Kleur aanpassen
		-Paspop

	3. We drawen de speler.
		-Doorgaan naar level 1
		-Speler maken
		-Level afmaken

3. Extra 
	1. Colorpicker
		-Sprite maken
		-Colorpicker maken
		-Colorize knop maken

	2. Random speler
		-Sprite maken
		-Random speler knop maken

4. Slot
	
Inleiding
In deze tutorial zal ik jullie uitleggen hoe je een eenvoudig systeem maakt dat de speler in staat stelt zijn eigen speler te ontwerpen.
De tutorial is gebaseert op eigen kennis, dit is 1 van de honderdenn manieren om een kleding systeem te maken.
Tips:
-Maak mappen om je sprites, script, en objecten in te bewaren.
-Verwijder overbodige objecten,sprites of scripts direct.
-Als je iets niet direct begrijpt, zoek het dan op op dit forum voor dat je een vraag stelt.
-Succes!

Uitvoering
1. We maken de sprites.

	a. Kledij:
Voor je de sprites gaat maken moet je eerst enkele basisregels weten.
We beginnen best met het lichaam.
Je kleurt het lichaam in het wit, en langs de randen grijs.
Daardoor krijg je langs de rand een verdonkering, wat een mooi effect geeft.
Als je je lichaam gemaakt hebt kopier je het.

Van de geplakte sprite wil ik een t-shirt maken.
We doen terug hetzelfde maar teken op het lichaam een t-shirt  en verwijderen
daarna de rest van het lichaam zodat alleen de t-shirt overblijft.
Kleur nu de t-shirt wit en langs de randen eventueel grijs.

Herhaal dat voor het aantal lichaamsdelen/kledingsstukken.
Geef alle sprites de naam spr_+"naam kledingsstuk"+"type nummer" (bv. spr_shirt1 en spr_shirt2 of spr_haar1 en spr_haar2)
Dat is later nodig voor het script.
Je kan van elke kledingsdeel een aantal andere ontwerpen maken, bv een t-shirt met strepen, en een zonder.
Wil je niet dat je de kleur kan aanpassen, dan kleur je dat kledingstuk gewoon in.
Dat doe je bijvoorbeeld bij een gezicht.

	b. Knoppen
Eerst maken we 2 sprites aan.
En met een pijl naar links, de andere met een pijl naar rechts.
Geef ze een naam zoals spr_knoplinks en spr_knoprechts.

Nu maak je nog een 3de knop die dient om de kleur te veranderen.
Bijvoorbeeld een knop met een t-shirt in verschillende kleuren.
Geef die een orginele naam en ga verder met de laatste knop.

De laatste knop die je nog moet maken is een simpele knop met de tekst "verder" erop.
Geef het een naam zoals "spr_knop_verder".

Dat was het voor de knoppen!

2. We laten de speler zijn kleren kiezen

	a. We maken de variables klaar.
Maak een object aan en noem het "obj_choosecontroler".
Geef het object geen sprite. Maak een create event en zet daarin:
[gml]
global.schoenen=1
global.haar=1
global.gezicht=1
global.shirt=1
[/gml]
Hierboven maak ik variables die zullen aangeven welk type van een bepaald kledingsstuk de speler moet dragen.
Bijvoorbeeld: global.schoenen=1, dat wil zeggen: de speler heeft schoenen aan van type 1 
Je moet deze code hierboven niet letterlijk overnemen, je moet het aanpassen aan jouw sprites en lichaamsdelen.
Voeg dit stukje erbij:
[gml]
global.kleurschoenen=c_gray
global.kleurhaar=c_yellow
global.kleurlichaam=c_orange
global.kleurshirt=c_blue
[/gml]
Dit zijn de standaard kleuren voor de schoenen, het haar, het lichaam en de t-shirt.
Je mag deze ook niet letterlijk overnemen, je moet ze terug aanpassen.
Pas op! Maak geen variable voor kledingstukken die niet van kleur mogen veranderen zoals het gezicht in mijn voorbeeld van daarnet.


	b. Type aanpassen aan de hand van knoppen
Maak een object aan en noem het obj_plus+"naam kledingstuk of lichaamsdeel" (bv. obj_plushaar)
Geef het de sprite van de knop met een pijl naar rechts.
Zet in de left pressed-event: (Pas op! Geen left button-event)
[gml]
if global.haar=3
{
//hier komt de code als het haartype =3 dus 3 is het maximum pas het aan als je meer haartypes hebt
}
else
{
//hier komt de code als het haartype geen 3 is.
}
[/gml]
Pas hierboven "haar" aan naar jouw kledingsstuk of lichaamsdeel aangegeven in de naam van het object.
Nu zorgen we ervoor dat als je op de knop drukt je kledingstype omhoog gaat.
[gml]if global.haar=3
{
global.haar=1//het haartype wordt terug 0, zodat er een soort cirkel ontstaat
}
else
{
global.haar+=1//Het haartype stijgt met 1
}[/gml]

Maak nu een object aan en noem het obj_min"naam kledingsstuk of lichaamsdeel" (bv. "obj_minhaar")
Geef het de sprite naar links.
Zet het volgende in het left-pressed event.
[gml]if global.haar=1
{
global.haar=3//het haartype wordt terug 3, zodat er een soort cirkel ontstaat
}
else
{
global.haar-=1//Het haartype daalt met 1
}[/gml]
Deze code zorgt ervoor dat het type daalt, of terug reset.

Maak nu alle knoppen links en rechts voor alle resterende lichaamsdelen met meerdere types.

	c.Kleuren aanpassen
Maak een object aan en noem het obj_colorize+"naam van kledingsstuk" (bv. obj_colorizehaar)
Geef het de sprite die dient om de kleur aan te passen.
Zet in het left pressed-event:
[gml]
var col; //zorgt ervoor dat de variable col op het einde wordt verwijderd
col=get_color(global.kleurhaar) // we vragen de speler achter een kleur, de default is global.kleurhaar
if col!=-1 //als de speler een kleur heeft gekozen en niet op kruisje of annuleren heeft geklikt
{ //dan
global.kleurhaar=col //past hij de kleur aan
}
[/gml]
Pas de bovenstaande code aan zodat hij overeenkomt met jouw kledingsstuk die je hebt gebruikt in de naam van je object.
Maak nu kleurenknoppen voor alle kledingsstukken waar je de kleur kan aanpassen.

	d. Paspop maken
Dit object is nodig om te zien hoe je mannetje eruit zal zien in het spel.
Maak een object aan en geef het de naam "obj_paspop".
Geef het de sprite van het lichaam. (bv. spr_lichaam)

Eerst gaan we wat arrays aanmaken in het create event.
Ze dienen om later de sprite te bepalen van een bepaalt type van een kledingsstuk.
[gml]
haartype[1]=spr_haar1
haartype[2]=spr_haar2
haartype[3]=spr_haar3

gezichttype[1]=spr_gezicht1
gezichttype[2]=spr_gezicht2
gezichttype[3]=spr_gezicht3

shirttype[1]=spr_shirt1
shirttype[2]=spr_shirt2
shirttype[3]=spr_shirt3

schoenentype[1]=spr_schoenen1
schoenentype[2]=spr_schoenen2
[/gml]
Maak voor elk kledingsstuk arrays aan voor elk type, stel die array gelijk aan de sprite die bij dat type hoort.
Je moet alleen arrays aanmaken voor de lichaamsdelen of kledingsstukken die meer dan 1 type hebben.

Nu gaan we de pop drawen.
[gml]draw_sprite_ext(spr_lichaam,-1,x,y,1,1,0,global.kleurlichaam,1)[/gml]
Deze code gebruik je om een lichaamsdeel of kledingsstuk te drawen die maar 1 type heeft maar wel kleuren.

[gml]draw_sprite(gezichttype[global.gezicht],-1,x,y)[/gml]
Deze code gebruik je om een lichaamsdeel of kledingsstuk te drawen die meer dan 1 type heeft maar geen kleuren.
gezichttype[global.gezicht] geeft de sprite van het gezicht terug met type global.gezicht.

[gml]draw_sprite_ext(shirttype[global.shirt],-1,x,y,1,1,0,global.kleurshirt,1)[/gml]
Deze code gebruik je om een lichaamsdeel of kledingsstuk te drawen die zowel meerdere types als kleuren heeft.

Resultaat:
[gml]draw_sprite_ext(spr_lichaam,-1,x,y,1,1,0,global.kleurlichaam,1)

draw_sprite(gezichttype[global.gezicht],-1,x,y)

draw_sprite_ext(shirttype[global.shirt],-1,x,y,1,1,0,global.kleurshirt,1)

draw_sprite_ext(schoenentype[global.schoenen],-1,x,y,1,1,0,global.kleurschoenen,1)

draw_sprite_ext(haartype[global.haar],-1,x,y,1,1,0,global.kleurhaar,1)[/gml]
Deze code drawt alle lichaamsdelen en kledingsstukken op volgorde van de onderste laag naar de bovenste.
Eerst het lichaam daarop het gezicht daarop de t-shirt en daarop de schoenen. (zo kan je een mooie overlapping maken)

Testen!
Maak een room en zet er alle benodigde objecten in.
Vergeet obj_choosecontroler niet te zetten!
Test nu je spel!

Als alles werkt: Goed gedaan.
Indien er een foutje is of een afwijking, dan overloop je de tutorial nog eens en zoek je naar je fout.
Als je je fout niet vind kan je nog altijd hulp vragen.

3. We drawen de speler

	a.Doorgaan naar level 1
Eerst maken we een knop waardoor je naar het 1ste level gaat.
Maak een object aan en noem het obj_knop_verder.
Geef het de afbeelding van de sprite met de tekst verder erop.

Maak een left pressed event aan.
Zet daarin:
[gml]
//hier kan je eventueel save code plaatsen om
// de kledingvariables in een ini bestand te plaatsen
// kijk hiervoor naar een ini tutorial
if room_exists(room_next(room))//als er een volgende room bestaat
{
room_goto_next();// ga naar de volgende room
}
else
{
show_message("Je kan niet naar het eerste level gaan, dit is het laatste level!")
}
[/gml]
Plaats deze knop in je room en klaar is kees!

	b. Speler maken
Dit is eigenlijk bijna een herhaling van de paspop.
Daarom duplicaten* we "obj_paspop" en geven we het de naam "obj_speler".

*om te duplicaten klik je met je rechtermuisknop op obj_paspop en kies je "duplicate"
Duplicate verdubbelt eigenlijk het object.

Je hoeft nu alleen je besturing erbij te voegen.

	c. Level afmaken
Nu kan je nog allerlei objecten maken die je wil gebruiken.
Zoals muren, vijanden, portalen, enz.
Maak een room en geef die de naam "room_level1" plaats daar je muren en je speler.
Test nu je spel.
Indien alles naar behoren werkt: Proficiat! Je hebt de tutorial succesvol afgelegd!
Indien niet, overloop dan de tutorial op zoek naar je fout.

Extra
1. Colorpicker maken (staat niet in examle omdat het knoppen aanpast uit de tut)
Een colorpicker is een object waarmee je de kleur van iets kunt bepalen, in dit geval: een kledingsstuk.
Het voordeel aan een colorpicker is dat het handiger is.
Alleen verbruikt het veel ruimte en zal je daarom een verberg systeem erbij moeten maken, maar die staat hier niet bij uitgelegd.

	a. De sprite maken
Om een colorpicker sprite te maken, kan je die simpel van het internet halen of zelf een klein programmatje schrijven die
er 1 drawt en waarvan je een print scr. van kunt nemen.

Maak een sprite aan en noem het "spr_colorpicker"
Geef het een sprite van een verzameling van kleuren die de speler mag gebruiken.
Zoals in de gamemaker sprite editor.
Je kan er eventueel een rand aan geven, maar dat raad ik af. (dat moet je in het script meewerken)

	b. Colorpicker maken
Maak een object en noem het "obj_colorpicker"
Zet dit in het create event:
[gml]global.color=c_white
global.select="lichaam"[/gml]
We maakten een variable die standaard gelijk is aan wit.
Dan maken we een variable die aangeeft welk lichaamsdeel we op dat moment inkleuren, zorg ervoor dat dat gelijk is
aan een naam die je hebt gebruikt na global.kleur+"...", bv global.kleurlichaam.

left button event:
[gml]
global.color=draw_getpixel(mouse_x,mouse_y)
[/gml]
Deze code veranderd de variable naar de kleur waar de muis op staat.
Als je er een rand hebt bijgemaakt moet je bovenaan "if mouse_x<... && mouse_x>... && mouse_y<... &&mouse_y>..." bij.
Maar dat hangt af van je rand.

Step event:
[gml]
variable_global_set("kleur"+string(global.select),global.color)
[/gml]
Deze code veranderd de waarde van global.kleur+"global.select" naar global.color.
	c.Colorize knop maken
Om te veranderen wat de colorpicker aanpast moet je in alle colorize knoppen dit aanpassen:
Left pressed event wordt:
[gml]
global.color=global.kleurhaar //verander global.kleurhaar naar global.kleur+"naam van het lichaamsdeel of kledingsstuk dat in de naam van de knop staat."
global.select="" //verander "" naar de naam van het lichaamsdeel of kledingsstuk dat in de naam van de knop staat.
[/gml]
bv. 
global.color=global.kleurhaar
en
global.select="haar" in obj_colorizehaar

Klaar!
Herorder alle objecten en test je spel.
Het zou moeten werken, anders herbekijk je de tutorial nog eens.

2. Random knop maken (staat wel in de example)
	a. Sprite maken
Maak een sprite en noem het spr_random
Zoals in meeste games gebruik ik hiervoor een vraagteken als sprite.

	b.Script maken
Maak een object aan en noem het obj_random.
Geef het de sprite die we net gemaakt hebben.

[gml]make_color_rgb(random(255),random(255),random(255))[/gml]
Deze code crert een random kleur.
choose(1,2,3,4,5,9)
Deze code kiest een getal van 1,2,3,4,5 of 9

Left button event:
[gml]
global.kleurlichaam=make_color_rgb(random(255),random(255),random(255))
global.haar=choose(1,2,3)
global.kleurhaar=make_color_rgb(random(255),random(255),random(255))
global.gezicht=choose(1,2,3)
global.shirt=choose(1,2,3)
global.kleurshirt=make_color_rgb(random(255),random(255),random(255))
global.schoenen=choose(1,2)
global.kleurschoenen=make_color_rgb(random(255),random(255),random(255))
[/gml]
Deze code maakt alles random, je zou ze normaal moeten begrijpen en kunne aanpassen naar jouw kledingsstukken.

Zet ze in je room en test het uit!
Gewoon verslavend om eraf te blijven :p

Slot
Nu je je eigen systeem hebt gemaakt, kan je die nog altijd uitbreiden.
Sla bv. Alles op in een ini bestand of gebruik animatie in je sprites.
Je kan hiervan ook een online spel maken.
Ik hoop dat deze tutorial jou heeft geholpen en je later van pas zal komen.
Eerder heb ik al eens geprobeerd een tutorial hierover te posten, maar die was niet netjes en ordelijk gemaakt en
is daarom terecht afgewezen.

Gemaakt met 4 jaar gm ervaring, en veel passie :p

Met vriendelijke groeten,
Simon Backx