Assignment 10 – Giuseppe

My main inspiration came from my dear friend Youssab William’s midterm project ASCENT. I love the idea of platformers and honestly Youssab inspired me to make something on p5 that has platformer mechanics.

As an act of creative freedom and my usual obsession with ownership, I want to call this project Giuseppe.

soooo here’s the sketch. Use Arrows or WASD to move

 

but wait. this isn’t a platformer. not even close actually. so what happened? we will explore that in this documentation

Before writing a single line, I mapped out what matter.js actually needed to do for this to work.  I created a simple platformer and saw how things will go from there.

Well…yeah.. this wasnt what I expected. I don’t know what I expected hoenstly. Just not something… this bad?

I immediately scrapped the idea after this video. But before pulling out my hair and making yet another 17th sketch trying to think for a concept for this assignment, I noticed that the little red cube sticks on the sides of the platforms. This sparked an idea in me, a parkour-like game that a ninja (later simplified to a cube) jumping from wall to wall to avoid the lava. Just like those old mobile games. Then Giuseppe was born.

The concept is a vertical survival game. You wall-jump up an endless shaft while lava rises beneath you. There are zones. There are coins. There is a freaking lava floor that will inevitably come and get you.

The player body never has velocity set directly except during wall jumps. Everything else is force application. Horizontal movement applies a constant force every frame:

let moveForce = 0.0012;
if (keyIsDown(LEFT_ARROW) || keyIsDown(65))
  Body.applyForce(playerBody, playerBody.position, { x: -moveForce, y: 0 });
if (keyIsDown(RIGHT_ARROW) || keyIsDown(68))
  Body.applyForce(playerBody, playerBody.position, { x: moveForce, y: 0 });

if (playerBody.velocity.x > 5)
  Body.setVelocity(playerBody, { x: 5, y: playerBody.velocity.y });
if (playerBody.velocity.x < -5)
  Body.setVelocity(playerBody, { x: -5, y: playerBody.velocity.y });

The speed cap is load-bearing. Without it the player accelerates forever and becomes impossible to control in about four seconds. The cap is also what makes the movement feel snappy rather than floaty, because the player reaches max speed almost immediately and stays there. Force application without a cap is just a slow velocity set with extra steps

I then entered my usual 3 am flowstate and I reached this position.

[im trying to upload but facing issues so i cant really upload attachments]

Thr wall grip part is the part I’m most proud of, and also the part that took the longest to not be horrible.

The grip has two phases. When the player first touches a wall, the engine fires a counter-force upward that decays linearly to zero over 4000ms. At t=0 the counter-force exactly cancels gravity so the player feels weightless on the wall. By t=4000ms it’s gone and the player slides off. After the grip expires there’s a 500ms push-off phase where a small lateral force nudges the player away from the wall and canjump is set to false, so you can’t wall-jump from a dead grip.

if (contactAge < GRIP_DURATION) {
  let t = contactAge / GRIP_DURATION;
  let counterForce = lerp(0.0012, 0, t);
  Body.applyForce(playerBody, playerBody.position, {
    x: 0,
    y: -counterForce,
  });
} else if (contactAge < GRIP_DURATION + PUSH_DURATION) {
  Body.applyForce(playerBody, playerBody.position, {
    x: -wallSide * 0.0015,
    y: 0,
  });
  canJump = false;
}

The 0.0012 is not random. matter.js default gravity produces a downward acceleration of 0.001 per update tick at default settings. The counter-force matches it exactly so the player hovers. I lied, AI found that value for me when I asked it why the player was either rocketing upward or sliding instantly. The fix was embarrassingly simple once I knew what to look for.

The grip timer also renders as a visual bar on the wall panel. The bar height shrinks as grip time expires and turns red during the push-off phase so you always know exactly how much time you have left. I added that late and it completely changed how readable the game was.

The collision architecture has three events all running simultaneously.

beforeUpdate resets canJump, wallSide, and touchingWall to false/zero every single frame before any collision detection runs. This is important because matter.js collision events only fire when contact is active, which means if nothing fires this frame, the flags stay false. No ghost jumps. No lingering wall contact.

collisionActive runs every frame the player overlaps any surface and handles all the grip logic above. It’s also where wallSide gets set, by comparing the player’s x position to the wall body’s x position to determine which side the wall is on.

collisionStart handles orb collection as a one-shot event. Orbs are sensor bodies so they have zero physical response, but they still fire collision events. When an orb-player pair is detected, collectOrb() removes the body from the world, increments the coin count, and spawns a particle burst.

Events.on(physEngine, "collisionStart", function (event) {
  for (let pair of event.pairs) {
    let bodyA = pair.bodyA, bodyB = pair.bodyB;
    if (
      (bodyA.label === "Orb" || bodyB.label === "Orb") &&
      (bodyA.label === "Player" || bodyB.label === "Player")
    ) {
      collectOrb(bodyA.label === "Orb" ? bodyA : bodyB);
    }
  }
});

The game has five zones that unlock at ascending height thresholds. Each zone changes the wall color, background color, and lava color simultaneously. The transition happens in one line: currentZone = newZoneIdx, and a banner fades in with the zone name then dissipates over about 100 frames.

The zone palette design was fun. I wanted each zone to feel like a different biosphere. SURFACE is warm red on near-black. THE CAVERNS goes amber on deep brown. CRYSTAL DEEP goes cold blue on dark navy. THE STORM goes violet on almost-black. THE VOID goes teal on pure void. The lava color shifts with the zone too, so in CRYSTAL DEEP the rising floor is a cold electric blue rather than orange, which is a detail I’m very happy with and nobody will probably notice.

The first working version was a flat canvas with a rectangle and a ground. No camera, no walls, just a box with gravity and a jump. That worked in maybe 30 minutes. Everything after that was a long series of things that almost worked.

The wall detection broke me for a while. The original approach used collisionActive to detect wall contact but I kept getting canJump = true from the ground at the same time as wallSide = 1 from a wall, which meant ground jumps sometimes registered as wall jumps and gave you the kick-off velocity by accident. The fix was the label check: if (surfaceBody.label !== "Wall" && surfaceBody.label !== "Ground") continue gates everything behind identity. The floor has label “Ground” and never sets wallSide. Walls have label “Wall” and never set canJump during push-off. Clean separation.

The camera also gave me problems. My first implementation was camY = CANVAS_H/2 - playerBody.position.y with no lerp, which meant the camera snapped instantly to the player position and the whole canvas strobed. Adding the lerp (camY = lerp(camY, camYTarget, 0.1)) was one line and made the whole thing feel like a proper game. That 0.1 lerp factor took me a while to find. At 0.05 the camera felt detached. At 0.2 it still twitched. 0.1 was the number.

The game is more playable than I expected at this stage. The wall jump interaction teaches itself within about three or four deaths, which is a good sign. Players understand immediately that the walls are grippable and that the lava is not.

The zone system adds something I wasn’t sure would land. The color transitions give the game a sense of depth even though the gameplay is identical in every zone. There’s something psychologically effective about a wall turning violet that makes you feel like you’ve gone somewhere.

Two things I’m not settled about. The lava speed is constant right now and it should probably accelerate as you get deeper into the game. A flat rise rate means the game’s difficulty is almost entirely dependent on your wall jump skill, which is fine but I think a rising speed floor would create more interesting decision moments. The second thing is audio. The game is very silent and I think a low bass rumble that rises in pitch as the lava approaches would communicate danger in a way the red vignette edge alone doesn’t quite reach. The vignette is good. Sound would make it visceral.

I also want to revisit the particle burst on wall jump. Right now it’s an orange burst at the jump origin, which looks fine. I think making it directional, so the particles kick backward from the wall jump direction, would make the jump feel more physically grounded without any extra complexity.

What to Expect from Lucky Mate Casino in 2023?

Lucky Mate Casino has emerged as a noteworthy player in the online gaming market, capturing attention with its diverse offerings and user-friendly interface on its official site, luckymatecasino.app. As 2023 unfolds, players can expect a seamless and integrated gaming experience, with multiple features aimed at enhancing user engagement and satisfaction.

Diverse Game Selection

The gaming catalog at Lucky Mate Casino is extensive, featuring a multitude of categories including slots, table games, and live dealer options. Players can explore titles from renowned software providers, ensuring high-quality graphics and exciting gameplay experiences. New releases are regularly added, keeping the content fresh and engaging.

Slot enthusiasts can look forward to a variety of themes, from classic fruit machines to modern video slots with innovative mechanics. Additionally, table game aficionados can enjoy different versions of popular games like blackjack, roulette, and baccarat, catering to both beginners and seasoned players.

  • Wide range of slots and table games
  • Regularly updated library with new titles
  • Live dealer games for real-time interaction
  • High-quality graphics and seamless gameplay
  • Popular titles from top software providers

Bonuses and Promotions

Lucky Mate Casino offers a robust bonus ecosystem that includes generous welcome bonuses for new players as well as ongoing promotions for loyal customers. The welcome package typically consists of match bonuses and free spins, allowing players to start their gaming journey with a promising boost.

Loyalty programs are also in place, rewarding frequent players with points that can be redeemed for bonuses or exclusive perks. The transparent terms and conditions associated with these bonuses help players understand what to expect, promoting responsible gaming habits.

Safety and Security

Ensuring a secure gaming environment is paramount at Lucky Mate Casino. The platform operates under a valid gaming license, which guarantees fair play and adherence to industry regulations. Furthermore, player data is protected through advanced encryption technologies, making online transactions safe and secure.

Players can rest assured that responsible gaming measures are easily accessible, with options to set deposit limits and self-exclude if necessary. This focus on player well-being reflects the casino’s commitment to creating a trustworthy gaming community.

Feature Description Importance
Licensing Operates under a strict gaming authority Ensures fair play and security
Encryption Advanced technology for data protection Safeguards player information
Customer Support 24/7 availability through multiple channels Enhances user experience and trust

Player Support and Accessibility

The customer support team at Lucky Mate Casino is available 24/7, ensuring that players have assistance whenever needed. Support can be accessed via live chat, email, or phone, providing multiple options tailored to player preferences.

The website is designed to be mobile-friendly, allowing players to enjoy their favorite games on smartphones and tablets. The responsive design ensures that the gaming experience is just as immersive on mobile devices as it is on desktop.

FAQ

What types of games can I play at Lucky Mate Casino?

Lucky Mate Casino offers a variety of games including slots, table games, and live dealer options, catering to various player preferences.

Are there bonuses available for new players?

Yes, new players can take advantage of generous welcome bonuses that include match deposits and free spins, providing a strong starting point.

Is Lucky Mate Casino safe to play at?

Absolutely, Lucky Mate Casino operates under a valid license and employs advanced encryption technologies to ensure secure gaming and player safety.

Opplev 55Bet Casino: Spillutvalg og kvalitet

Opplev 55Bet Casino, en spennende plattform som tilbyr et variert utvalg av casinospill. Denne plattformen skiller seg ut ved sine unike funksjoner og spillkatalog. Ved å besøke 55bet casino free spins kan spillere utforske et mangfold av alternativer, fra klassiske spilleautomater til live dealer erfaringer.

Variasjon i spillutvalget

55Bet Casino tilbyr et bredt utvalg av spill, som inkluderer spilleautomater, bordspill, video poker og live casino. Dette gir spillere muligheten til å velge mellom en rekke sjangre og spillestiler. Spilleautomater fra kjente leverandører dominerer katalogen, og nye titler lanseres jevnlig for å holde spillopplevelsen frisk og engasjerende.

Bordspill som blackjack, roulette og baccarat er også godt representert, og spillere kan velge mellom forskjellige versjoner av hvert spill. Den gode variasjonen lager et attraktivt miljø for både nye og erfarne spillere.

Kvalitet fra anerkjente leverandører

Spillene på 55Bet Casino er utviklet av topp-leverandører i iGaming-bransjen. Dette sikrer at spillere får tilgang til høy kvalitet, både når det kommer til grafikk og spillmekanikk. Leverandører som NetEnt, Microgaming og Evolution Gaming bidrar til å heve standarden på spillutvalget.

Med fokus på både nyheter og populære titler, vil spillere alltid finne noe spennende å spille, enten de er på jakt etter store gevinster eller bare ønsker å ha det gøy.

Brukervennlighet og mobilspill

55Bet Casino sin plattform er designet med brukervenlighet i tankene, noe som gjør det enkelt for spillere å navigere. Den responsive designen gjør det mulig å spille på både PC og mobile enheter uten problemer. Dette er en stor fordel for spillere som ønsker tilgang til spillene sine når som helst og hvor som helst.

For de som foretrekker å spille på farten, tilbyr casinoet et variert utvalg av mobile spill. Spillene er optimalisert for mobile enheter, noe som gir en sømløs opplevelse uansett hvilken enhet som brukes.

FAQ: Ofte stilte spørsmål

  • Hvordan setter jeg inn penger? Du kan sette inn penger ved å bruke flere betalingsmetoder, inkludert kredittkort og e-lommebøker.
  • Er 55Bet Casino trygt? Ja, plattformen er lisensiert og har implementert sikkerhetstiltak for å beskytte spillernes informasjon.
  • Tilbyr de et lojalitetsprogram? Ja, 55Bet Casino har et godt utviklet lojalitetsprogram som belønner lojale spillere med eksklusive fordeler.
Spilltype Antall tilgjengelige spill Populære spill
Spilleautomater Over 500 Starburst, Gonzo’s Quest
Bordspill Flere titler Blackjack, Roulette
Live Casino 100+ Live Blackjack, Live Roulette

Why Alawin Casino is Worth Checking Out in 2026

In the ever-evolving landscape of online gaming, Alawin Casino stands out as a noteworthy platform worth exploring in 2026. This casino combines diverse gaming options with robust security features, creating an engaging experience for players across the board. With its user-friendly interface and a commitment to responsible gambling, Alawin aims to cater to both novice and seasoned players alike.

Diverse Game Selection

Alawin Casino boasts an extensive catalog of games, including slots, table games, and live dealer experiences. Players can find popular titles from renowned software providers, ensuring a high-quality gaming experience. The selection is regularly updated, introducing new games to keep the experience fresh and exciting.

The casino offers various categories to explore:

  • Video Slots
  • Classic Slots
  • Table Games (Blackjack, Roulette, Poker)
  • Live Dealer Games
  • Progressive Jackpots

Trust and Security

One of the primary concerns for online players is security. Alawin Casino addresses this by utilizing advanced encryption technologies to safeguard players’ personal data and financial transactions. The platform operates under a reputable gaming license, ensuring compliance with industry standards and promoting fair play.

Responsible gaming initiatives are also a priority, with resources available to help players manage their gaming habits. These include deposit limits, self-exclusion tools, and links to support organizations.

Attractive Bonuses and Promotions

The bonus ecosystem at Alawin Casino is highly appealing, featuring welcome offers and ongoing promotions for loyal players. New players can expect generous welcome bonuses that enhance their initial deposits, providing an excellent opportunity to explore the game library.

Additionally, the loyalty program rewards dedicated players with exclusive benefits such as free spins, cashbacks, and bonus credits, creating a lasting value for frequent visitors.

Payment Infrastructure

Alawin Casino supports a variety of payment methods, catering to a global audience. Players can choose from traditional options like credit cards and bank transfers, as well as modern solutions including e-wallets and cryptocurrencies. The platform is designed to facilitate quick transactions, with minimal waiting times for deposits and withdrawals.

Payment Method Deposit Time Withdrawal Time
Credit/Debit Cards Instant 1-3 Days
e-Wallets Instant 24 Hours
Cryptocurrency Instant 1 Hour

Frequently Asked Questions

Is Alawin Casino safe to play?
Yes, Alawin operates under a licensed jurisdiction and employs strong security measures to protect player information.

What bonuses are available for new players?
New players can take advantage of generous welcome bonuses and promotions, enhancing their initial deposits significantly.

What payment methods does Alawin Casino offer?
Alawin supports a variety of payment options, including credit cards, e-wallets, and cryptocurrencies, allowing for flexible transaction methods.

24 Casino im Test: Ist es die beste Wahl?

24 casino online ist eine Plattform, die sich durch ihre breite Spielauswahl und benutzerfreundlichen Features auszeichnet. In diesem Testbericht wird untersucht, ob sie die beste Wahl für Online-Spieler ist, insbesondere in Bezug auf Sicherheit, Spielkatalog und Boni.

Spielkatalog und Anbietervielfalt

Der Spielkatalog von 24 Casino ist bemerkenswert umfangreich. Spieler finden eine Vielzahl von Spielautomaten, Tischspielen sowie Live-Casino-Optionen. Besondere Erwähnung verdienen die Partnerschaften mit führenden Softwareentwicklern wie NetEnt, Microgaming und Evolution Gaming, die für innovative und qualitativ hochwertige Spiele bekannt sind. Neue Titel werden kontinuierlich hinzugefügt, was die Plattform besonders attraktiv macht.

Diese Vielfalt sorgt dafür, dass jeder Spieler etwas nach seinem Geschmack findet. Von klassischen Spielautomaten bis hin zu aufregenden Live-Dealer-Spielen ist alles vertreten. Hier sind einige der vorgestellten Kategorien:

  • Slots
  • Tischspiele
  • Live-Casino
  • Jackpots
  • Neuheiten

Transparente Sicherheitsmaßnahmen

Bei 24 Casino stehen Sicherheit und Vertrauen an oberster Stelle. Die Plattform ist lizenziert und unterliegt strengen Vorschriften, die den sicheren Spielbetrieb gewährleisten. Zudem kommen moderne Verschlüsselungstechnologien zum Einsatz, um die persönlichen und finanziellen Daten der Spieler zu schützen.

Ein verantwortungsvolles Spiel ist ebenfalls gewährleistet, da die Plattform verschiedene Tools anbietet, die den Spielern helfen, ihre Spielgewohnheiten zu überwachen. Die Verpflichtung zur Fairness wird durch die Verwendung von Zufallsgeneratoren (RNG) bestätigt, die für faire Spielergebnisse sorgen.

Boni und Aktionen für Spieler

Die Bonusangebote von 24 Casino sind vielseitig und ansprechend. Neue Spieler können von großzügigen Willkommensangeboten profitieren, die oft Freispiele und Bonusguthaben beinhalten. Zudem gibt es regelmäßig Aktionen für Bestandskunden, die die Spieler dazu anregen, aktiv zu bleiben.

Die Bedingungen für die Bonusangebote sind klar und transparent, was es den Spielern erleichtert, die Vorteile optimal zu nutzen. Eine Tabelle mit den wichtigsten Bonusdetails finden Sie hier:

Bonusart Betrag Wettanforderungen
Willkommensbonus 100% bis zu 200€ 30x
Einzahlungsbonus 50% bis zu 100€ 25x

FAQ zu 24 Casino

Ist 24 Casino sicher?
Sicherheit wird durch eine gültige Lizenz und moderne Verschlüsselungstechnologien gewährleistet.

Welche Spiele kann ich bei 24 Casino finden?
24 Casino bietet eine Vielzahl von Spielautomaten, Tischspielen und Live-Casino-Optionen.

Wie funktionieren die Bonusangebote?
Die Bonusangebote sind klar strukturiert und die Wettanforderungen sind transparent angegeben.

Zusammenfassend lässt sich sagen, dass 24 Casino eine Vielzahl von attraktiven Angeboten und verfügbaren Spielen bietet. Die Sicherheitsvorkehrungen und fairen Spielbedingungen machen die Plattform zu einer überlegenswerten Option für Spieler aller Erfahrungsstufen. Daher wird empfohlen, die Plattform selbst auszuprobieren, um die Vorzüge zu erleben.

Tips for å forbedre din spilleopplevelse hos NV Casino

Å forbedre spilleopplevelsen hos nv casino krever at spillere forstår de ulike aspektene av plattformens tilbud. Enten man er ny eller erfaren, kan kjennskap til casinoets strukturer og bonuser øke sjansene for å ha en vellykket og underholdende opplevelse.

Spillekatalog og variasjon

NV Casino tilbyr et bredt spekter av spill, inkludert spilleautomater, bordspill og live dealer-spill. Variasjonen gjør det enkelt å finne noe som passer enhver spillestil. Spill fra anerkjente leverandører sikrer høy kvalitet og underholdning.

Den daglige oppdateringen av nye spill holder plattformen fr fresh og attraktiv for både nykommere og lojale spillere. Her er noen av de mest populære spillkategoriene hos NV Casino:

  • Spilleautomater
  • Bordspill som blackjack og roulette
  • Live dealer-spill med ekte croupierer
  • Jackpot-spill med store premier
  • Sportsspill og e-sportseksjoner

Bonusprogram og kampanjer

Når det kommer til bonuser, utmerker NV Casino seg gjennom sitt attraktive velkomsttilbud og løpende kampanjer. Nye spillere mottar ofte en innskuddsbonus sammen med gratisspinn, som gir en solid start. Det finnes også lojalitetsprogrammer som belønner langvarige spillere med eksklusive fordeler.

Her er et eksempel på hva spillere kan forvente:

Type Bonus Beløp Omdra små spill
Velkomstbonus 100% opptil 2000 NOK 30x
Gratisspinn 50 spinn 20x

Sikkerhet og pålitelighet

Spillernes sikkerhet er en prioritet for NV Casino. Plattformen er lisensiert og bruker avansert kryptering for å beskytte spillernes personlige informasjon og transaksjoner. Dette gir spillerne en trygg opplevelse når de satser og spiller.

Ansvarlig spilling er også en viktig del av NV Casino, hvor de oppfordrer spillere til å sette grenser for seg selv. Kasinosupporten er tilgjengelig for å hjelpe spillere med eventuelle spørsmål eller bekymringer.

Ofte stilte spørsmål

Hvordan setter jeg inn penger hos NV Casino?

Spillere kan enkelt sette inn penger ved å bruke populære betalingsmetoder som kort, e-lommebøker og bankoverføring.

Er NV Casino trygt å bruke?

Ja, NV Casino er lisensiert og bruker sikkerhetsprosedyrer for å beskytte spillernes data og transaksjoner.

Hvilke spill kan jeg finne hos NV Casino?

Plattformen tilbyr et variert utvalg av spilleautomater, bordspill og live dealer-spill fra topp leverandører.

A Closer Look at Lizaro Casino’s Trust Signals

The online gaming platform lizaro is making waves in the iGaming industry with a strong foundation built on trust signals. These signals play a crucial role in enhancing player confidence and encouraging new users to engage with the platform. This article will explore the various trust signals employed by Lizaro Casino, showcasing how they contribute to a secure and enjoyable gaming experience.

Licensing and Regulation

One of the fundamental trust signals for any online casino is its licensing status. Lizaro Casino operates under a reputable gaming license, ensuring that it adheres to strict regulatory standards. This license guarantees players that the casino is regularly audited and that its operations are transparent. The presence of a valid license is a significant assurance for potential players, indicating that their online gaming experience will be safe and fair.

Moreover, being licensed means the casino must comply with laws regarding player protection, promoting responsible gambling practices, and implementing necessary safeguards against fraud and unfair practices. Such assurances are instrumental in attracting players who prioritize safety.

Secure Transactions

Security extends beyond licensing; it encapsulates the entire gaming experience, especially regarding financial transactions. Lizaro Casino utilizes advanced encryption technology to protect sensitive player information during deposits, withdrawals, and other financial activities. This encryption ensures that players’ personal and financial data remains confidential and secure from potential threats.

The platform offers a variety of trusted payment methods, including credit cards, e-wallets, and even cryptocurrencies. This diverse range of options not only enhances convenience but also builds trust, as players can choose their preferred payment solution depending on their comfort level and regional availability.

Responsible Gambling Practices

In order to foster a safe gaming environment, Lizaro Casino actively promotes responsible gambling practices. The casino provides players with various tools to manage their gameplay, including deposit limits, time-outs, and self-exclusion options. Such measures help to ensure that gambling remains a fun and entertaining activity, rather than leading to potential addiction.

By highlighting its commitment to responsible gaming, Lizaro Casino not only protects its players but also demonstrates a genuine care for their well-being. This position strengthens the casino’s reputation and builds lasting trust with its user base.

  • Licensed and regulated for player protection.
  • Utilizes advanced encryption technology.
  • Offers diverse payment methods for convenience.
  • Promotes responsible gambling practices.
  • Regularly audited for fair gaming policies.
Feature Benefit Impact on Trust
Licensing Adherence to regulatory standards Builds player confidence
Secure Transactions Protection of financial data Enhances overall security
Responsible Gambling Supports player well-being Fosters long-term loyalty

Know Your Customer (KYC) Protocols

Lizaro Casino adheres to Know Your Customer (KYC) protocols, which require players to verify their identities. This practice not only aids in preventing fraud but also ensures that the casino operates within legal frameworks. By implementing KYC, the casino reassures players that their identities are protected and that all necessary measures are taken to maintain integrity within the platform.

Engaging with KYC processes may initially appear inconvenient for some players; however, it is a necessary step in maintaining safety and trust across the platform. Additionally, the efficiency of Lizaro’s KYC verification process aims to minimize any disruption to the player experience.

Frequently Asked Questions

  • Is Lizaro Casino licensed? Yes, Lizaro Casino operates under a reputable gaming license ensuring regulatory compliance.
  • What payment methods does Lizaro Casino support? Lizaro offers a variety of payment methods including credit cards, e-wallets, and cryptocurrencies.
  • How does Lizaro promote responsible gambling? The casino provides tools such as deposit limits and self-exclusion options to help players manage their gambling habits.

assignment 9

This project is inspired by murmuration by robert hodgin. It merges algorithmic plant growth with flocking mechanics. The project transitions particles between a structured tree form and a chaotic swarm. I also took inspiration from the reinforcement learning process which is where the idea of generations comes from.

 

I started by defining the base entity. I created the Boid class then I gave each boid standard steering behaviors. These include separate and align then I added the cohere function. These functions calculate vectors. The boids avoid crowding instead they match velocities with neighbors. Next, I tackled the structural element. I wrote a recursive function named genPts. This function calculates coordinates for a branching fractal tree. The function takes arguments for position and angle then it processes length and depth and it calculates segments using trigonometry. It pushes vectors into a global treePts array but I needed a system to alternate between the two behaviors so I implemented a time-based state machine inside the draw loop. Phase zero represents the growth phase. Boids use an arrive steering behavior to settle into specific coordinates along the fractal branches. Phase one represents the swarm phase. The boids break free. They apply flocking rules.

Particles

flocking

fractar tree generation

putting the particles together

the code i am proud of is regenTree function. It manages the visual evolution of the simulation across generations, then it scales the tree depth. It mutates the branching spread angle and dynamically links the boid objects to the newly generated tree points.

// rebuild tree by age/gen
function regenTree(g) {
  treePts = [];
  
  // scale depth/len by gen (cap depth 4 fps)
  let maxD = min(3 + floor(g / 2), 6); 
  let baseLen = min(height * 0.12 + g * 12, height * 0.3);
  
  // mut spread by gen
  let spread = PI / (5 + sin(g) * 1.5);

  genPts(width / 2, height - 30, -PI / 2, baseLen, maxD, spread);

  // sync boids to new pts
  for (let i = 0; i < treePts.length; i++) {
    if (i < boids.length) {
      boids[i].treePos = treePts[i].copy(); // assign new tgt
    } else {
      // spawn new boids at base to sim growth
      boids.push(new Boid(width / 2, height, treePts[i]));
    }
  }
  
  // trim excess (edge case)
  if (boids.length > treePts.length) {
    boids.splice(treePts.length);
  }
}

A specific challenge involved the arrive steering behavior. The boids would overshoot their target coordinates at high velocities. They would oscillate rapidly around the target point. I adjusted the distance threshold mapping by mapping the boid’s speed to decrease linearly when it enters a 100-pixel radius of its assigned treePos. This adjustment solved the jittering issue.

 

I plan to add interactive elements. Users will click to disrupt the swarm. I want to introduce a wind force variable. This force will push the boids horizontally. I will implement a visual trail system for the boids to emphasize their flight paths.

DRIFT – Assignment 8

There’s something genuinely strange about watching a crowd of autonomous agents share a canvas.

That’s the question behind DRIFT: what happens when you put three radically different vehicle archetypes into the same space, give each one its own agenda, and just let physics run?

The starting point was Craig Reynolds’ foundational work on steering behaviors: seek, flee, separation, alignment, cohesion. Those behaviors are well-documented and well-taught. The challenge I set for myself was to use them as raw material for something that reads more like an ecosystem than a demo.

I ended up with three vehicle types:

Seekers chase a moving attractor that is basically a signal that traces a path across the canvas. They leave luminous trails and pulse as they move.

Drifters ignore the signal entirely. They flock through alignment, cohesion, and separation.  and wander using noise.

Ghosts flee. They push away from the signal and from the combined mass of every other vehicle in the scene. They end up haunting the edges of the canvas.

The signal itself moves on a parametric Lissajous curve, so it sweeps the canvas continuously without any user input required.

 

The Ghost’s `applyBehaviors` method is the piece I find most satisfying. The rule sounds simple — flee everything — but the implementation has a specific texture to it.

javascript
applyBehaviors(signal, allVehicles) {
let fleeSignal = this.flee(signal, 220);
let fleeCrowd = createVector(0, 0);

for (let v of allVehicles) {
fleeCrowd.add(this.flee(v.pos, 90));
}

let w = this.wander(1.2);

fleeSignal.mult(2.0);
fleeCrowd.mult(0.8);
w.mult(0.9);

this.applyForce(fleeSignal);
this.applyForce(fleeCrowd);
this.applyForce(w);
}

 

What I like here is that `fleeCrowd` is an accumulated vector. For every seeker and drifter on the canvas, the ghost computes a flee force and adds them all together. The result is that the ghost reads the density of the crowd. A ghost near a tight cluster of drifters gets a much stronger push than one near a single seeker. It behaves like a pressure system.

The wander force on top of that means no two ghosts trace the same path even under identical starting conditions. The noise field shifts slowly over time, so the wandering feels natural.

The wander method from the base `Vehicle` class handles this:

wander(strength) {
let angle = noise(
this.pos.x * 0.003,
this.pos.y * 0.003,
driftT * 0.4
) * TWO_PI * 2;

return p5.Vector.fromAngle(angle).mult(strength * this.maxForce);
}


 

 

Getting the ghost behavior to feel ghostly rather than glitchy. The first version had ghosts with a flee radius too small, so they’d enter the crowd and then snap violently outward. Increasing the signal flee radius to 220 pixels and smoothing the crowd flee with accumulated vectors fixed the snapping.

The Lissajous signal path. My first instinct was to use `mouseX` and `mouseY` as the attractor, which is the standard approach for seek demos. The problem is that a static mouse produces boring convergence, everyone piles up on the target and sits there. A Lissajous curve gave the signal genuine sweep across the canvas, which keeps seekers in motion even after they’ve converged. The math is minimal:

function getSignalPos(t) {
let cx = width * 0.5;
let cy = height * 0.5;
let rx = width * 0.32;
let ry = height * 0.28;
return createVector(
cx + rx * sin(t * 0.41 + 0.6),
cy + ry * sin(t * 0.27)
);

 

The frequency ratio `0.41 / 0.27` is irrational enough that the path never perfectly repeats, so the sketch keeps shifting over long observation periods.

 

 

The three archetypes don’t interact across types in any interesting way. Seekers don’t react to drifters. Drifters don’t notice ghosts. The only cross-archetype behavior is the ghost’s crowd flee, which reads seeker and drifter positions as obstacles. A next version could introduce:

– Seekers that are temporarily distracted by passing drifter clusters, pulled off their trajectory before resuming the chase.
– The signal occasionally splitting into two attractors, creating competing factions among the seekers.

Visually, the grid underneath the simulation was meant to read as a city viewed from above, but it’s almost invisible after the first frame. Rendering it to a persistent background layer would strengthen that spatial metaphor.

 

Mustafa Bakir Assignment 7 – Light Vortex

This sketch is laggy on p5 web editor so I included a video on VS Code.

 

This sketch is inspired by teamLab Phenomena’s Light Vortex.

 

This sketch creates a generative laser show where beams of light emerge from the screen edges and converge to form shifting geometric patterns.  The visual experience centers on the idea of a “central attractor” shape. Every beam starts at a fixed position on the edge of the canvas. The end of each beam connects to a point on a central shape. These shapes cycle through circles, squares, triangles, spirals, waves, and stars. As the user triggers a transition using the button Space, the endpoints of the beams slide smoothly from one shape’s perimeter to the next.

I began with a prototype and then improved my sketch.

 

 

The logic requires several fixed values to maintain performance and visual density. I chose 144 beams total. This provides 36 beams per side of the screen.

const NUM_BEAMS         = 144;  
const BEAMS_PER_EDGE    = 36;
const TRANSITION_FRAMES = 120;
const MODES             = ['circle', 'square', 'triangle', 'spiral', 'wave', 'star'];

The state variables manage the current shape and the animation progress. transitionT tracks the normalized time (0 to 1) of the current morph.

Each laser is an instance of a Beam class. This class stores the origin point on the screen edge and handles the color logic. The recalcOrigin method assigns each beam to one of the four sides of the rectangle.

recalcOrigin() {
    const e = this.edge;
    const k = this.index % BEAMS_PER_EDGE;  
    if (e === 0)      { this.ox = W * (k + 0.5) / BEAMS_PER_EDGE; this.oy = 0; }
    else if (e === 1) { this.ox = W; this.oy = H * (k + 0.5) / BEAMS_PER_EDGE; }
    // ... logic for other two edges
}

To create a “glow” effect, I draw the same line three times with different weights and transparencies. The bottom layer is wide and faint. The top layer is thin and bright white. Basically drawing from the gradiant concept professor Jack showed us when he created a gradient on a circle.

The most technical part of the code involves the getShapePoint function. Every shape needs to map a value t (from 0 to 1) to a coordinate (x, y).

The circle uses basic trigonometry. The square divides $t$ into four segments.

function squarePoint(t, r) {
  const seg  = t * 4;
  const side = Math.floor(seg) % 4;
  const frac = seg - Math.floor(seg);
  switch (side) {
    case 0: return { x: -r + frac * 2 * r, y: -r };
  }
}

For polygons, the code treats each side as a separate linear path. For the square, the path is divided into four equal segments. If normT is between 0 and 0.25, the point is on the top edge. If it is between 0.25 and 0.50, it moves to the right edge.

function calcSquareVert(normT, maxRadius) {
  const totalSegs = normT * 4;
  const activeEdge = Math.floor(totalSegs) % 4;
  const edgeLerpFrac = totalSegs - Math.floor(totalSegs);
  // map sub-coords based on current active edge
}

 

When a transition occurs, the code calculates the point for the current shape and the point for the next shape. I use a linear interpolation (lerp) between these two positions. I then apply an easeOutCubic function to make the movement feel more organic and less mechanical. The visual depth increases significantly because of the intersection points. When two beams cross, the code renders a glowing “node.”
I used a standard line-line intersection algorithm. This calculates the exact x and y where two segments meet.
x = x1 + t(x2-x1) and the same for y coordinates.
Drawing every single intersection would ruin the frame rate. I implemented two filters. First, the code only draws a maximum of 800 intersections per frame. Second, I created an intersectionAlpha function. This function checks how close an intersection is to the central shape. Nodes far away from the core are transparent. Nodes near the core glow brightly.

function intersectionAlpha(ix, iy) {
  const threshold = min(W, H) * 0.12;
  let minD = Infinity;
  for (let k = 0; k < SHAPE_SAMPLE_N; k++) {
    const d = Math.sqrt((ix - shapeSamples[k].x) ** 2 + (iy - shapeSamples[k].y) ** 2);
    if (d < minD) minD = d;
  }
  return constrain(Math.exp(-3.5 * minD / threshold), 0.03, 1.0);
}

The atmosphere relies on blendMode(ADD). This mode makes colors brighten as they overlap.

Then I wanted to add my special touch for the glow. As a video editor and motion designer, I use this special overlay effect a lot called Light Leaks. Here’s an example if you do not know what light leaks are.

Here’s a video of how it looked like before the light leaks. It was so flat so the light leaks were defintely a good addition.

I added a drawLightLeaks function. It uses p5’s noise() to move large, soft radial gradients around the background. These gradients use a low opacity to simulate lens flare or atmospheric haze.

function renderLightLeaks() {
  blendMode(ADD);
  const activeLeaks = 2;

  const leakColors = [
    'rgba(40, 120, 255, 0.25)', // elec blue
    'rgba(120, 40, 255, 0.20)', // deep violet
    'rgba(255, 175, 45, 0.15)'  // warm gold
  ];

  // iter to gen noise-driven radial gradients
  for (let iterIdx = 0; iterIdx < activeLeaks; iterIdx++) {
    let noiseX = noise(iterIdx * 10, frameCount * 0.002) * canvasWidth;
    let noiseY = noise(iterIdx * 20 + 100, frameCount * 0.002) * canvasHeight;
    let radiusVal = (0.5 + noise(iterIdx * 30 + 200, frameCount * 0.0015)) * max(canvasWidth, canvasHeight) * 0.8;

    let radGrad = drawingContext.createRadialGradient(noiseX, noiseY, 0, noiseX, noiseY, radiusVal);

    // bind colors and fade out alpha
    radGrad.addColorStop(0, leakColors[iterIdx % leakColors.length]);
    radGrad.addColorStop(1, 'rgba(0, 0, 0, 0)');

    drawingContext.fillStyle = radGrad;
    drawingContext.fillRect(noiseX - radiusVal, noiseY - radiusVal, radiusVal * 2, radiusVal * 2);
  }
  blendMode(BLEND);
}

As always with all of my sketches, I faced a performance issue. Thankfully after running into preformance issues a billion times in my life I managed to get better with knowing how to resolve them. Calculating 144 origins and 150 shape samples every frame is cheap. Calculating thousands of potential intersections is expensive. Drawing every intersection would create too much visual noise. The calcIntersectAlpha function calculates the distance between an intersection point and the nearest point on the central shape. Nodes far away from the core are transparent. Nodes near the core glow brightly.

  • updateCachedEnds: This function runs once at the start of the draw() loop. It stores the end position of every beam. This prevents the intersection loop from recalculating the morphing math thousands of times.

  • updateShapeCache: This pre-calculates the geometry of the central shape. The intersection alpha function uses this cache to quickly check distances without running the shape math again.

  • Collision Cap: I set MAX_LINE_INTERSECTS to 800. This ensures the computer never tries to render too many glowing dots at once.

For future improvements, I tried making the light beams draw an illusion of a 3d shape while still in a 2d canvas. This kind of worked but kind of didn’t because I think I would need to implement dynamic scaling because the canvas looked overwhelming even thou you can still see the object. I decided to scrap this idea and remove it from the code. here’s how it looked like.