Julkaistu

Yamaha Octaver OC-01 ja Flanger FL-01

Ostin kaksi uutta kitarapedaalia, tai siis uutta ja uutta – suoraan 80-luvultahan nämä ovat! Yamaha Flanger FL-01 (=Korg FLG-1) on vanha tuttavuus – sellainen on studiolla jo vanhastaan, mutta korjattavana. Hankin toisen kappaleen helpottamaan vanhan yksilön korjausta. Yamaha Octaver OC-01 (=Korg OCT-1) on tietääkseni melko harvinainen pedaali. Ison yrityksene valmistama harvinainen vintagepedaali  tarkoittaa yleensä sitä, että kitaristit eivät tykänneet siitä ja siksi sen valmistus lopetettiin. Eli ennen kuin alan hehkuttaa ”jes harvainen vintageherkkupala 80-luvun alusta, tää on hieno”-tyylillä, kerron neutraalisti, millaisia nuo efektit oikeasti ovat.

Yamaha <-> Korg

Yamaha ei näitä pedaaleja ole tehnyt – ne ovat oikeasti Korgin valmistamia. Korgilla on näistä pedaaleista identtiset versiot lukuunottamatta mallinumeroita ja runkoa. Itse piirilevy ja toiminta ovat samoja.

Ei todellakaan mikään true bypass

Yamahan vintage-pedaalit syövät soundia bypass-tilassa ja ne ovat todellisia äänenhuonontimia pedaalilaudassa. Mulla on myös Yamaha Phaser PH-01 ja siinä on sama juttu bypassin kanssa – ääni menee hieman särölle, oli efekti päällä tai ei. Annan näiden silti olla kiinni pedaalilaudassa muiden joukossa, koska efektien tuottama särö on jotenkin hyvänkuuloista, ainakin omaan korvaani.  Se korjattavana oleva Flanger-pedaali jäi mykäksi, koska aloin vaihtaa siihen laadukkaampia osia. Jotain meni pieleen ja into loppui kesken. Nyt voin korjata ja parannella sitä, koska voin vertailla toimivan yksilön kanssa signaalitietä.

FL-01-flangerissa on kolme TL062CP J215B2 oparia. TL062 on vähävirtainen versio TL082:sta. TL072 on vähäkohinainen versio TL082:sta. Siten TL062 käyttää vähemmän virtaa, mutta se kohisee enemmän kuin TL072.  Selkeä modauskohde on irrottaa nuo kolme TL062:sta piirilevyltä, laittaa tilalle IC-kannat ja paremmat oparit, esim. 5532:t.

Efektien soundi

Yamaha Flanger FL-01 on ”lämminsoundinen”. En yleensä käytä tuota adjektiivia soundia kuvaillessani, koska lämmin voi tarkoittaa ihan mitä tahansa – yleensä lähinnä treblen puutetta. Tässä tapauksessa tarkoitan lämpimällä harmonista, monimutkaista, orgaanista ja yllätyksellistä soundia, jota ei pysty digitaalisesti mallintamaan. Pedaali lähtee elämään ihan omaa elämäänsä kun feedback-nuppia vääntää maksimiasentoon. Manual-nuppia kääntelemällä efektiä voi muljuttaa käsipelillä. En ole vastaavaa muissa pedaaleissa nähnyt.

OC-01-oktaaverista ei ole vielä kokemusta. Voisin kuvitella sen muistuttavan Electro-Harmonix Octaveria sillä erolla, että ääni on keskialueella säröytyneempi. Tästä tulee tilanneraporttia kun ehdin testata pedaalia käytännössä.

Nämä yksilöt ovat olleet osa Yamahan tosi harvinaista multipedaalijärjestelmää. Virtaliitin ei ole normaali, joten näitä täytyy käyttää paristolla tai 9 VDC muuntajalla paristoliittimen kautta. Saattaa olla, että poraan näihin paikat normaaleille DC-liittimille niin ei tarvitse säätää adaptereiden kanssa.

Ensimmäinen testi

Laitoin pedaalit kiinni lautaan ja testasin niitä Les Paulilla Mesa/Boogie MK3 -yhdistelmällä. Octaverin nupit rahisivat hieman, mutta pedaali kuitenkin toimi. Vertailin sitä pedaalilaudassa kiinni olevan Electro-Harmonix-oktaaverin kanssa. Yamahan soundi on kapeampi, melko keskialuevoittoinen ja tosi tumma, jopa liian tumma. Siihen verrattuna EH on tosi hifi, toistaen raikkaasti treblet ja bassot muhkeina ja silti hyvällä erottelulla. Yamahan soundista tuli heti mieleen Ritchie Blackmoren kitara Rainbow’n Difficult to cure -albumilla. Pedaali toimii kitarasoolojen paksuntamiseen kun wet-mixin pitää alle 40 prosentissa. 100 % wet kuulostaa oikeastaan aika ankealta.

Vihreä Flanger-pedaali olikin jo vanha tuttavuus. Huomasin heti, että näissä on suuria eroja. Tämä yksilö ei lähtenyt oskilloimaan samalla tavalla kuin vanha yksilöni, suurinta feedback-asetusta käyttämällä. Soundi oli silti tuttu ja inspiroivan orgaaninen ja rikas. Jätän tämän Flangerin pedaalilautaan paraatipaikalle ensimmäiselle riville.

 

Julkaistu

Boss OD-2 mod – käytä tavallista 9 VDC muuntajaa!

Vanhat Boss-pedaalit – kuten Boss OD-2 Super Overdrive, vaativat Bossin oman muuntajan.

Tein ohjeen, jolla Boss OD-2 ja muut vanhat Boss-pedaalit voidaan muuntaa yhteensopiviksi tavalliselle 9 V tasajännitteelle, jota kaikki pedaalilautojen virransyötöt ja normaalit 9 VDC muuntajat tarjoavat.

Lue ohje täältä: https://pulustudio.com/kirjasto/boss-od-2-mod-muuntaja/

 

 

 

Julkaistu

Ibanez Trashmetal TM-5 mod – halpaspedusta boutiqueksi!

Ibanez Trashmetal TM5 mod - Pulu Studio - kitarapedaalin korjaus

English summary:  This article describes my  Ibanez Trashmetal TM5 repair and modification project. If your footswitch is not working, just replace the C24 capacitor (1n) with a larger, one, for example 10 … 47 nF.

Otin pitkästä aikaa käyttöön Ibanez Trashmetal TM-5-pedaalin.  Sen jalkakytkin oli oikkuillut ennenkin, mutta nyt se oli lähes mahdoton saada jäämään päälle. Tee-se-itse-henkisenä tyyppinä avasin pedaalin ja aloin tutkia, voisiko kytkimen korjata jotenkin. Tästä lähti liikkelle suurempi erilaisten modausten ketjureaktio, jonka tuloksena päädyin vaihtamaan piirilevyltä 90 % komponenteista. Hintaa muutostöille tuli komponenttien osalta alle 10 €.

Jalkakytkimen korjaus

Tarvitsin pitkästä aikaa Ibanez Trashmetal TM5 -kitarapedaalia yhden biisin äänityksissä. Pedaali toimii soundin puolesta täydellisesti, mutta jalkakytkin on rikki. Se kytkee päälle ja pois ihan miten sattuu. Minuutin googlettamisen tuloksena opin, että kyseessä Ibanez Soundtank-sarjan pedaalien yleinen vika. Kytkimen toimimattomuuten on kaksi syytä:

  1. kytkimen kuluminen
  2. kytkimeen liittyvän kondensaattorin liian pieni arvo.

Ongelmana on se, että alkuperäisessä .001 uF kondensaattorissa ei ole tarpeeksi puskuria vaimentamaan kytkimen ”pomppimista”. Pomppiminen lisääntyy kytkimen vanhetessa. Vian voi korjata vaihtamalla kytkin uuteen tai vaihtamalla kondensaattori suurempaan. Jälkimmäinen tapa on parempi, koska kun kytkin taas vanhenee, niin se pitäisi taas vaihtaa. Suurempi kondensaattori kestää käyttäjänsä eliniän (otetaan kilpailu, minä tai kondensaattori julistautuu myöhemmin voittajaksi).

Piti päästä nopeasti asiaan, joten en tehnyt pedaalin ehjäämisprojektille mitään erillistä työtilaa, vaan yritän hoitaa homman tarkkaamon työpöydällä. Sopu sijaa antaa laitteille ja varaosille…

Kytkin SW1 on piirilevyn päässä keskellä:

Kytkin alapuolella sekä siihen liittyvä kondensaattori:

Apuvälineet tekevät piirilevyn korjaamisesta mielekästä hommaa – käytän tällaista Levenhuk Zeno Desk D11 -pöytämallista suurennuslasia. Iso linssi (halkaisija ehkä joku 8 cm) antaa 2,5x suurennuksen. Sen alla on pienempi 7,5x suurennuksen tarjoava linssi. Niitä voi käyttää erikseen tai päällekkäin. Päällekkäin laitettuna piirilevyn näkee 10x suurempana ja kaikki juotosten yksityiskohdat näkyvät leikiten. Tuossa on myös paikka kolville ja LED-lamppu, joka toimii verkkovirralla tai paristolla. Yhtiömme suosittelee vahvasti. 🙂

Myyn noita elektroniikan rakentamiseen suunniteltuja suurennuslaseja Kamavaja.fi-verkkokaupassa. Jos yhtään harrastat pedaalien tuunaamista, niin käy ostamassa tuollainen pois kuleksimasta. Ota myös pantaluuppi, se antaa elämänlaatua. 🙂

Välihuomautuksena täytyy mainita, että tässä Trashmetal-pedaalissa on japanilainen JRC 4558D opamp eli sama kuin miljoonien kitaristien himoitsemassa TS-808 Tube Sreamerissa.

Tässä vaihtoon menevä kondensaattori alkuperäinen 1 nF kondensaattorin (merkintä ”102”)

Tilalle laitan suuremman, n. 5-10 nF konkan – mitä tuolta hyllystä sattuu löytymään.

Kytkin

Yön yli asiaa mietittyäni halusin vaihtaa myös kytkimen. Toiveikkaana kävin riuhtomassa Uraltonen ovenkahvaa, mutta nehän ovatkin koronan takia kiinni lauantaisin. Kävin kuitenkin raikkaalla aamukävelyllä ja otin turhan shoppailureissun analogisen maailman nauttimishetkenä. Tällainen kytkin tuohon piirilevylle menee vaihtoon:

ALPS SPPB512300 Ibanez Soundtank-pedaaleille - Pulu Studio HelsinkiALPS SPPB512300 – Sopii Ibanez Soundtank -pedaaleihin.

Koska kauppa oli kiinni, päätin luopua toistsaiseksi kytkimen vaihdosta ja tyytyä kondensaattorin vaihtamiseen.

C24 kondensaattori

C24 on on/off-kytkimen ”debounce”-kondensaattori. Ibanez teki Soundtank-pedaalien suunnittelussa virheen ja laittoi tuohon liian pieniarvoisen, 1 nF konkan. Se toimii pedaalin ollessa uusi, mutta kun kytkin kuluu ja alkaa heilua (tai oikeastaan värähdellä) edestakaisin sitä painettaessa, ei 1 nF kondensaattori enää riitä pehmentämään kytkemistä. Efektin päälle- ja poiskytkemisestä tulee arpapeliä. Kun C24:n tilalle laitetaan isompiarvoinen, esim. 5-10 nF konkka, alkaa vanhakin kytkin käyttäytyä kuin uusi.

Löysin studion varaston elektroniikankorjaustarvikkeista sopivan konkan. Vanha pois ja uusi tilalle:

 

Bonustehtävä 1

Vaihdoin virransyöttöpuolelle C30-kondensaattorin yleisenä huoltotyönä.

 

ON/OFF LEDin vaihto

Trashmetal-pedaalissa on punainen on/off-valo. Se on tosi himmeä. Ehkä se on uutena loistanut kirkkaammin, mutta ei enää 25 vuoden käytön jälkeen. LEDin etuvastus on alkuperäisessä n. 3.6k. Kirkastin LEDiä vaihtamalla tilalle 920 ohm vastuksen. Vaihdoin myös punaisen LEDin vihreäksi.

Tubescreamer TS-808 -tyylinen output

Muutin vastukset R34 ja R35 vastaamaan arvoiltaan Tubescreamer TS-808:n vastaavia.

  • R34: 470 Ohm => 100 Ohm
  • R35: 100 kOhm => 10 kOhm

Op amp irti ja tilalle kanta!

Trashmetal TM-5-pedaalissa on ilmeisesti käytetty useampia op amppeja. Mun versiossa on jo aiemmin mainitsemani JRC 4558. Irrotin sen piirilevyltä ja laitoin tilalle IC-kannan.

Kanta ei kauaa ollut tyhjänä… Ensimmäisenä laatikoista löytyi NE5532. Se käy pinnijärjestyksen puolesta suoraan 4558:n tilalle.  Kohinatasoltaan ja ”hifimäisyydeltään” NE5532 on luokkaa tuhat kertaa parempi kuin 4558.

Toisaalta kitarapedaaleissa ei haeta puhdasta ääntä vaan luonnetta, joten siksi 4558 on niin yleinen. Nyt halusin kuitenkin selkeämpää ja erottelevampaa soundia, joten jätin NE5532:n kantaan.  NE5532 imee virtaa enemmän kuin 4558, mutta pienen koekäytön aikana pedaali vaikutti toimivan ongelmitta. Virrankulutus ei ole mulle kynnyskysymys, koska käytän pedaalia käytännössä aina muuntajan kanssa.

4558:n vaihtoehtoja:

  • 4558 – halpa, kohiseva, silti suosittu
  • TL072 – hifimpi kuin 4558, käytetty miljoonassa kitarapedaalissa
  • NE5532 – vielä hifimpi kuin TL072 – tätä olen nähnyt esim. miksauspöydissä ja räkki-eq:ssa
  • OPA260

Testasin vuoron perään 4558, 072 ja 5532 -oparia  – 072 – 5532 opareita Gibson Les Paulilla, Mesa/Boogie MK III:n läpi soitettuna. Arvostelu fiilispohjalta:

JRC 4558:
Rakeinen, vähän sotkuinen yleissoundi. Säröä tulee kuitenkin hyvin. Kohinat kuuluvat läpi. Paljon ’luonnetta’. Texas-bluesiin sopiva.

TL072
Siisti, neutraalin oloinen särö, paljon yksityiskohtia. Lähellä NE5532:ta. Ehkä vähän ’hajuton ja mauton’.

NE5532
Todella siisti, yksityiskohdat toistava särö, vähiten kohinaa.  Selvästi ”korkeamman hintaluokan” soundia. Reilulla säröllä soitetut soinnut erottuvat paljon selkeämmin tällä kuin 4558:lla.

Oparivertailussa JRC 4558D, TL072 ja NE 5532.

 

Miten meni noin niinku omasta mielestä?

En ole pitkään aikaan rakentanut elektroniikkaa, joten tuntuma oli vähän ruosteessa… Kolvaustaidot olivat tallella, joten piirilevy säilyi ehjänä parin väärän kytkennän peruuttamisen jälkeenkin. Testasin ”debounce”-konkan tilalle neljääe eri vaihtoehtoa ennen kuin päädyin tuohon ylempänä kuvassa näkyvään siniseen 47 nF malliin.  1,5 nF (50 % alkuperäistä suurempi) rauhoitti kytkintä jonkin verran, mutta se ei vielä parantanut vikaa kokonaan. 100 nF oli liian suuri ja se aiheutti jotain ihme lieveilmiöitä pedaaliin. Olisin laittanut tilalle 10 nF:n, mutta en löytänyt sellaista laatikoiden pohjalta. 47 nF siis oli paras vaihtoehto. 🙂

Puhdistin piirilevyn isopropanolilla ja reilusti vedellä huuhtelemalla. Nyt se näyttää siistiltä!

Lisää modauksia, ei tätä kesken jätetä.

Vaihdoin vielä parikymmentä muuta kondensaattoria ja vastusta korkeampilaatuisiin. Yksinään noista mikään ei vaikuta korvinkuultavasti soundiin, mutta yhdessä ne parantavat soundia. ”Parempi” on tietysti subjektiivinen juttu, mutta tässä tapauksessa tarkoitan sillä lisääntynyttä erottelua, pienempää kohinaa ja lähes viininmaisteluadjektiivilla raikkaampaa yleissoundia. Jos into riittää (tai siis vapaa-aika), niin kolvaan jokaisen pikkuvastuksen tilalle normaalikokoiset. Ne löytyvät valmiiksi tuosta mun vastuslaatikosta…

Vaihdan pedaalin kaikki kondensaattorit parempilaatuisiin.

 

Myös vastukset vaihtuvat isomppiin 1/4 W malleihin sitä mukaa kun jaksan niitä kolvata. Varaosat löytyvät vastuslaatikosta! Olen kerännyt melko kattavan sarjan 20 Ohm – 2M vastuksia.

 

Diodit, IC-kannat ym. tarvikkeet löytyivät myös lajiteltuina edellisten projektien jäljiltä.

Montako osaa voi vaihtaa, ennen kuin kyseessä on uusi pedaali?

Ehdin tämän korjaussession aikana vaihtaa Trashmetal-pedaaliin n. 25 komponenttia (maalattu yllä olevassa kuvassa vihreällä). Pedaalille tulee vielä identiteettikriisi – ”kuka minä olen?” 😀 Transistoreja ja diodeja en ole vielä vaihtanut, joten niissä on edelleen pedaalin alkuperäinen henki. Ehkä jätän tämän nyt tällaiseksi.  Pedaali kuulostaa nyt todella hyvältä, eikä mulla ole juuri tällaista koskaan ollut! AB-vertailu pedaaliulaudassa kiinni olevaan Boss Blues Driver BD-2:n kanssa:  Blues Driver päästää läpi paljon enemmän bassoa. Trashmetallin särö on ”kimaltelevampaa” ja ”vetisempää”, bassoa tulee tämäntyyppiseen säröön riittävästi.

Eikä tässä vielä kaikki…

Pari päivää myöhemmin palasin projektin pariin ja vaihdoin kaikki signaalitiellä olevat vastukset ja kondensaattorit. Ainoastaan jalkakytkimeen liittyvät osat jäivät päivittämättä sitä ensimmäisenä vaihdettua konkkaa lukuunottamatta. Ne kun eivät vaikuta soundiin.

C18 kondensaattori
Vaihdoin alkuperäisen 21n suurempaan 48n konkkaan (nimellinen 47n).  Nyt pedaali ei leikkaa niin paljon alapäätä kuin ennen.

Vastukset R3 ja R4:

Uusi kytkin kylkeen!

Kokeilin irrottaa toisen clippig diodin. WOW!!! 🙂 Pedaali muuttui ihan erilaiseksi! Soundista tuli todella ”rouhea”.  Samalla volataso nousi n. 6 dB, joka oli luonnollinen seuraus siitä että otin diodin pois. Mutta kyllähän se alkuperäisen kaltainen soundikin oli hyvä…

Löysin studion varastosta laatikoiden pohjalta pienen kytkimen, jonka ajattelin sovittaa pedaalin kylkeen. Ahdas kotelo on tosi täynnä, mutta löysin sisältä yhden kohdan, jossa piirilevyllä on matalia komponentteja. Siinä oli tarpeeksi tilaa lisäkytkimelle. Siis poraamaan!

 

Mitä seuraavaksi?

Harkitsen pedaalin uudelleenkoteloimista normaaliin metallikoteloon. Samalla tekisin tähän true bypass -kytkimen. JFET ei huono, mutta pedaalin muotoilun takia joudun rakentamaan uuden metallikoteloon sopivan kytkimen ja siihen true bypassin tekeminen on helpompaa. Uudelleenkoteloinnissa vaihdan luonnollisesti myös liittimet sekä potentiometrit. Sen jälkeen TM-5 on jo niin kaukana alkuperäisestä, että voin nimetä sen uudeksi pedaaliksi. 🙂

Julkaistu

Baysix – Good Time äänitystä

Baysix, tuo 80-luvulla Levyraadin voittanut kenties Suomen ensimmäinen poikabändi, tekee taas uutta biisiä studiolla! Edellinen julkaisu tänä syksynä oli Live, Love and Leave:

Tänään äänitimme Kallen lauluja. Kalle on ihan hullun taitava stemmalaulujen tekijä – sieltä tulee lead-laulun tuplausta, terssiharmoniaa, kvinttiharmoniaa, seiskaa, ysiä ja ihan mitä vain keksii pyytää! Tänään oli taas niitä studiopäiviä, jolloin huomasin, että mikrofoneissani ei ole mitään vikaa – laulaja paikalle, kanava auki ja äänitys päälle. Hyvältä kuulostaa! 🙂

Illan edetessä paikalla olleet kolme Baysixin jäsentä alkoivat sekoilla biisin C-osan kanssa. Rakkaudesta (tai sen puutteesta) kertova biisi lähti mitään varoittamatta espanjalaishenkiseen flamengoon ja tyypit alkoivat huudella nopeiden taputuksien päälle jotain espanjalaisia fraaseja. Virallisen kantani mukaan bändi teki rohkeasti omaehtoista taidetta.

Viimeisen projektitiedoston tallennuksen aikana biisissä oli 114 raitaa, joista n. puolet lauluja. On tuo edelleen lauluvetoinen bändi!

Tässä vielä kertauksena Baysix kultaiselta 80-luvulta:

Julkaistu

Kitaravahvistimen sulakkeen vaihto – sain sähköiskun

Vaihdoin tänään sulakkeen Mesa/Boogio Mark 3 -combooni. Virtakytkin oli OFF-asennossa, joten eikun työntämään uutta sulaketta pesään. Styrkkari oli hämärässä nurkassa ja jouduin tekemään homman käsikopelolta. Parikymmentä sekuntia ähellettyäni taivas löi tulta ja valtava valokaari kulki tulimeren säestämänä kädestäni ruumini läpi lattiaan. 640 millisekuntia myöhemmin repäisin käteni irti. Katsoin hetken aikaa lattialle sikiöasentoon käpertynyttä hiiltynyttä ruumistani ennen kuin huomasin olevani edelleen elossa.
Nyt 10 tuntia tapahtuneen jäkeen menin katsomaan Mesa/Boogien sivuilta ohjetta sulakkeen vaihtamisesta.  Siellä sanotaan (suomennettuna): VAROITUS: Kytke virrat pois ennen kuin vaihdat sulakkeen tai irrotat pultteja kotelosta.
No oisit heti sanonut!
En ole tottunut, että sulake on ennen virtanappia, joten olin huolimaton ja varomaton. Muista säkin sähköturvallisuus kitarastyrkkareiden kanssa!
Vähän ehkä dramatisoin tapahtunutta, mutta trauma jäi…
Julkaistu

Darkthrone – In the shadow of the horns cover-projekti

Tyrmä-bändi aikoo coveroida norjalaisen Darkthronen black metal -klasikon ”In the shadow of the horns”.  Bändin vastaavana tuottajana minulla on nyt projektina opetella biisi ja tehdä siitä omannäköinen versio. Aloitin tutkimalla alkuperäisen studioversion rakennetta. Kirjoitin samalla ylös biisin tempokartan.

Tätä biisiä ei pysty soittamaan yhdellä tempolla klikin kanssa! Mikä tempo pitäisi valita? Alin on 98 bpm, ylin 156 bpm. Bändi on soittanut biisin studiossa nauhalle rummut + kitara -duona fiilispohjalta. Komppi eläää koko ajan ja osien välissä on kummallisia tempovaihdoksia.

Jatkuu…

Julkaistu

Tyrmä – Wasteland Forest

Tyrmä - Wasteland Forest (Linda Lemonade)

Napakymppi TV-ohjelmassa oli jengillä aina tapana kysyä kilpailijoiden musiikkimakua. Yksi vastaus jäi mieleen kun neiti A sanoi olevansa musiikin suhteen kaikkiruokainen. ”Iskelmän lisäksi kuuntelen myös humppaa.”

Tässä musiikkia kaikkiruokaisille suoraan studion kiviarinauunista. Biisissä lauletaan englantia ja puolivälissä vaihdetaan latinaan. Normipäivä.

 

Julkaistu

Fire Action – Streetwise Hercules

Tässä Fire Actionin viimeinen single, jonka bändi kävi nauhoittamassa Pulu Studiolla jo vuosi sitten. Levy-yhtiökuvioiden takia kappaletta ei saanut julkaista, mutta sitten tulikin lupa. Ihme säätöä noitten levy-yhtiöiden kanssa… 🙂 Musavideolla bändi liikkuu studion kulmilla hämärillä sivukaduilla. Kitarasoolo käytiin kuvaamassa ratikkakiskoilla Mäkelänkadulla. Oli aina joku 40 sekuntia aikaa olla kiskoilla ennen kuin piti hypätä sivuun pois sporien tieltä. SPOLER: Miekkatyttö teurastaa lopuksi koko bändin.

Julkaistu

Asteroids-pelin ohjelmointi

[PELI EI OLE VIELÄ IHAN VALMIS, MUTTA JOS HALUAT KOKEILLA KEHITYSVERSIOTA, NIIN TÄSTÄ PÄÄSEE PELAAMAAN & TESTAAMAAN!]

Tee-se-itse-miehenä koodasin viime viikolla nettiselaimessa toimivan Minesweeper-pelin. Tällä viikolla harrasteprojektina oli mennä ajassa taaksepäin vuoteen 1979 ja Atarin legendaarisen Asteroids-pelin kimppuun.  Halusin tehdä pelin mahdollisimman pitkälle vektorigrafiikalla, aivan kuten esikuvansa.

Asteroids-pelin idea on yksinkertainen: ohjaat avaruusalusta, jolla ammutaan tohjoksi sua lähestyviä asteroideja ja vihaisia ufoja. Mitä enemmän saat tuhoa aikaan, sitä suuremmalla pistemäärällä sut palkitaan. Pelin syvimmät arvot eivät sovellu sellaisenaan toimivan yhteiskunnan peruskiveksi, mutta tämä on rentouttavaa viihdettä, jossa ketään ei oikeasti vahingoiteta.

Koodausalustana käytän Minesweeperin tapaan p5*js-kirjastoa, jolla grafiikat saa loihdittua helposti nettisivun HTML5 canvas-alueelle. Alustus on  yksinkertaista; tarvitaan vain kaksi Javascript-funktiota eli setup() ja draw(). Loput ovat kuorruttamista.

function setup() {
  createCanvas( 800, 400 );
  frameRate( 30 );
}
function draw() {
   // Tätä funktiota kutsutaan nyt 30 kertaa sekunnissa.
}

 

Setup()-funktiolla luodaan piirtoalue, jossa peli toimii. p5*js-kirjasto kutsuu draw()-funktiota automaattisesti halutuin aikavälein (yllä asetettu 30 kertaa sekunnissa) ja sen sisällä piirretään pelialue aina puhtaalta pöydältä uusiksi.

Ääretön avaruus

Asteroids-pelissä pelaaja, asteroidit ja ammukset pullahtavat reunan yli jouduttuaan toiselle puolelle ruutua.

if (this.x > space_w) this.x = 0;
if (this.y > space_h) this.y = 0;
if (this.x < 0) this.x = space_w;
if (this.y < 0) this.y = space_h;

Vektorigrafiikan tekeminen

Piirsin pelin grafiikat muuten kokonaan katsomalla Youtubesta alkuperäistä Asteroids-peliä ja kuvittelemalla pelihahmot 12×12 kokoiseen ruudukkoon. Kuvittelin mielessäni asteroidin ja syötin viivapiirroksena sen koordinaatit Javascript-taulukkoon tällä tavalla:

// Asteroidien vektorigrafiikka
asteroid_shapes[0] = [
 4,0,
7,1,
 8,0,
 10,0,
 10,2,
 12,3,
 12,5,
 10,6,
 12,9,
 9,12,
 2,12,
 0,9,
 1,7,
 1,5,
 0,4,
 0,2,
 4,0
];
Piirtäminen ruudulle tuon taulukon perusteella tapahtuu näin:
    pixel( shape_coordinate ) {
       return (shape_coordinate-6 ) * this.size;
    }
    for (var i=0; i < this.shape.length-2; i+=2) {
            line (
                this.pixel( this.shape[i] ),
                this.pixel( this.shape[i+1] ),
                this.pixel( this.shape[i+2] ),
                this.pixel( this.shape[i+3] )
            );
        }
pixel()-funktio skaalaa taulukon arvot 0-12 sopivan kokoisiksi x,y-koordinaateiksi vastaamaan ruudulla olevia pikseleitä. Ennen viivojen piirtämistä piirtokoordinaatiston origo on siirretty asteroidin paikalle ruudulla.
Pelaajan avaruusaluksen ja asteroidit pystyin piirtämään yhdellä, yhtenäisellä viivalla, mutta ufo vaati monta erillistä viivataulukkoa. Tein koordinaatit ottamalla alkuperäisestä Asteroids-pelistä kuvakaappauksen tilanteesta, jossa ufo näkyy ruudulla. Otin ufon lähempään tarkasteluun PhotoShoppiin, jotta pystyin tarkastelemaan sen yksittäisiä pikseleitä:
Päätin käyttää ufon koordinaatistona 30 x 24 kokoista taulukkoa. Hahmottelin vektorigrafiikkaufon tutkimalla yllä olevassa kuvassa olevia x- ja y-koordinaatteja. Syötin viivojen päätepisteet taulukkoon seuraavasti:
     this.shape[0] = [ 0,10, 13,6, 17,1, 24,0, 31,1, 35,6, 47,10 ];
        this.shape[1] = [ 5,9, 24,9, 42,9 ];
        this.shape[2] = [ 0,10, 12,17, 24,17, 36,17, 47,10];
Lopputulos kuvaruudulta kaapattuna:
Ufon piirtorutiini:
    draw() {
        push();
        stroke(”#ddd”);
        strokeWeight(1);
        translate( this.x, this.y );
        // Piirrä ufo
        for (var sh=0; sh < this.shape.length; sh++) {
            var s = this.shape[sh];
            for (var i=0; i <= s.length -2; i+=2) {
                line ( this.pixel(s[i]),  this.pixel(s[i+1]), this.pixel(s[i+2]),  this.pixel(s[i+3] ));
            }
        }
        pop();
    }
Törmäysten tarkastusta varten tein ufon ympäri menevän viivan:
        this.collision_shape = [0,20, 29,0, 58, 20, 41,30, 16,30,0,20];// Yksinkertainen ufon muoto törmäyksien tarkastamiseen

Törmäyksen tutkiminen

Ensimmäisessä versiossa tutkin kappaleiden välistä törmäystä käyttämällä yksinkertaista etäisyyden mittaamista kappaleen keskeltä. Pythagoran lausetta ei olekaan tullut käytettyä sitten kouluaikojen… 🙂 Tämä ei kuitenkaan tyydyttänyt täysin minua, joten halusin tutkia törmäykset tarkemmin kappaleiden ääriviivojen tarkkuudella.

Löysin netistä Javascript-funktion, joka palauttaa true tai false sen mukaan, risteävätkö kaksi viivaa keskenään. Pelaajan törmäyksen asteroidiin tarkastan niin, että tutkin, leikkaako jompi kumpi avaruusaluksen kahdesta pisimmästä sivusta  minkä tahansa asteroidissa olevan viivan kanssa.

 for (var i=0; i < this.shape.length-4; i += 2 ) {
            if ( lineIntersect(
                this.x + this.pixel( this.shape[i] ),
                this.y + this.pixel( this.shape[i+1]),
                this.x + this.pixel( this.shape[i+2]),
                this.y + this.pixel( this.shape[i+3]),
                player.x + player.pixel( player.shape[0] ),
                player.y + player.pixel( player.shape[1] ),
                player.x + player.pixel( player.shape[2] ),
                player.y + player.pixel( player.shape[3] )
            ) ||
            lineIntersect(
                this.x + this.pixel( this.shape[i] ),
                this.y + this.pixel( this.shape[i+1]),
                this.x + this.pixel( this.shape[i+2]),
                this.y + this.pixel( this.shape[i+3]),
                player.x + player.pixel( player.shape[2] ),
                player.y + player.pixel( player.shape[3] ),
                player.x + player.pixel( player.shape[4] ),
                player.y + player.pixel( player.shape[5] )
            )
            ) {
                return true;
            }
        }
Asteroidin ja ammuksen välisen törmäyksen tarkastan yksinkertaisemmin etäisyysmittauksella asteroidin keskipisteeseen ja ottamalla huomioon asteroidin keskimääräisen halkaisijan.

Äänet

Samplasin alkuperäisestä Atari Asteroids -pelistä kaikki pelin äänet. Editoin ja masteroin ne Adobe Auditionilla siisteiksi ja muunsin äänitiedostot nettiystävällisiksi mp3-tiedostoiksi.

 

Asteroidin räjähdysanimaatio

Asteroids-pelissä räjähdys on yksinkertainen partikkelien lentäminen satunnaiselta vaikuttaviin suuntiin räjähtävän kappaleen origosta.  Itse tekemässäni versiossa räjähdykset tallennetaan explosions[]-taulukkoon luomalla siihen Explosion-luokkia antamalla räjähdyksen x- ja y-koordinaatit sekä partikkelien lukumäärä. Pienet asteroidit tuottavat vähemmän partikkeleita kuin jättimöhkäleet.

Esim. luodaan 50 partikkelin räjähdys kohtaan x,y: explosions.push( new Explosion( x, y, 50 );

Tallensin partikkeleiden attribuutit yhteen luokan sisällä olevaan taulukkoon:
[0] x
[1] y
[2] dx
[3] dy
[4]  x (seuraava räjähdys)
[5] y (seuraava räjähdys)
jne.
x = räjähdyksen x-koorinaatti
y = räjähdyksen y-koordinaatti
dx = partikkelin nopeus x-akselilla (negatiivinen arvo = vasemmalle, positiivnen = oikealle)
dy = partikkelin nopeus y-akselilla (negatiivinen arvo = ylös, positiivnen = alas)
class Explosion {
    particles;
    particle_count;
    age;
    alive;
    constructor(x, y, particle_count) {
        this.age = 50;
        this.alive = true;
        this.particle_count = particle_count;
        this.particles = [];
        for (var i=0; i < this.particle_count-4; i+=4) {
            var dx = ( Math.random() * 7 )  -3.5;
            var dy = ( Math.random() * 7 ) -3.5;
            this.particles[i] = x;
            this.particles[i+1] = y;
            this.particles[i+2] = dx;
            this.particles[i+3] = dy;
        }
    }
    move() {
        if (!this.alive) return;
        for (var i=0; i < this.particle_count-4; i+=4) {
            this.particles[i] += this.particles[i+2];
            this.particles[i+1] += this.particles[i+3];
        }
        this.age–;
        if (this.age <= 0) {
            this.alive = false;
            console.log(”Räjähdys valmis.”);
        }
    }
    draw() {
        if (!this.alive) return;
        for (var i=0; i < this.particle_count-4; i+=4) {
            push ();
            ellipseMode(CENTER);
            fill ( 100+ this.age*2);
            ellipse ( this.particles[i], this.particles[i+1], 2+this.age/16);
            pop ();
        }
    }
}
Jokaisella päivityskerralla kunkin partikkelin x- ja y-koordinaatteja muuttaan muuttujien dx ja dy verran. Nuo arvot taas on arvottu satunnaislukugeneraattorilla räjähdyksen luomishetkellä.

Ufon ampuman ammuksen suunnan laskeminen

Taas paluu koulumatematiikkaan… Kun tiedän aluksen ja ufon x- ja y-koordinaatit ja haluan, että ufo tähtää keskelle pelaajan alusta, niin miten tämä lasketaan? Tarvitsen ammuksen nopeudelle deltaX ja deltaY -arvot, joilla sitä liikutetaan 30 kertaa sekunnissa ruudulla.
Kulman laskeminen tapahtuu Math.atan2()funktiolla, joka palauttaa kulman tasolla radiaaneina (0,0) ja (y, x) -pisteiden välillä.
       // Ammuksen suunta: ufosta pelaajaan päin
        var deltaX = Math.floor( ufo.x – player.x );
        var deltaY = Math.floor( ufo.y- player.y +40 ); // +40 tarvitaan, jotta keskipiste olisi aluksen keskellä eikä vasemmassa reunassa
        this.angle =  Math.atan2( deltaY, deltaX );  // tällä funktiolla lasketaan aluksen ja ufon välinen kulma ruuudulla
        this.angle += Math.random()*.1 -.05; // lisätään hieman satunnaisuutta lähtökulmaan
        this.dx = -this.speed * Math.cos( this.angle ); //  deltaX = luodin nopeus kertaa kulman kosini
        this.dy =- this.speed * Math.sin( this.angle ); // ja sama deltaY:lle siniä käyttäen