<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>The Wind through the Wheels</title>
	<link>https://the-wind-through-the-wheels.com/rss/</link>
	<atom:link href="https://the-wind-through-the-wheels.com/rss/" rel="self" type="application/rss+xml" />
	<description>The most recent posts on The Wind through the Wheels&#x00027; blog.</description>
	<pubDate>Mon, 27 Apr 2026 12:45:09 +0000</pubDate>
	<ttl>60</ttl>
	<item>
		<title>We&#x00027;ve delivered our game design document</title>
		<description><![CDATA[]]></description>
		<pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate>
		<content:encoded><![CDATA[<p>A year ago, we've been extremely lucky to receive a grant from the CNC (French National Centre for Cinema and the Moving Image) to work on a game design document for The Wind through the Wheels. We finalized it last month and we are quite happy with the progress we've made on defining the game, both in story, design and game mechanics.</p>

<p>If you wish to consult it, it is available <a href="https://adelfaure.net/docs/the_wind_through_the_wheels/gdd.pdf">here</a> but only in french (and as this is the first game design document we've written, we are uncertain of its quality, so let's hope it's correct).</p>

<p>At first the game was intended to be entirely done in ASCII art but during the GDD writing, we switched to a misc-text mode style close to PETSCII using the Textor engine I'm working on. ASCII surely was very cool but I think colored text mode will allow more expressiveness and cool animation style (like the previous cycling animation I posted). Here a a mock-up for the riding screen, including landscape parallax scrolling and dialogue between characters between road events and getting to destination.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1053/2025-02-27_new-graphic-style-travel-screen.png">
      <figcaption></figcaption>
  </figure>

<p>Without yet having reworked the prototype we have for this type of view with these new graphics, here the animated sprite of a cyclist to give an idea of what it will all look like in motion :</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1053/2025-02-16_textmode-cycling.mp4" type="video/mp4">
    </video>
    </figure>

<p>There will be turn-based RPG mechanics adapted to cycling. The team will battle against random elements and road events determined by topographical properties based on the player's travel choices. For example, the forest will prevent wind, while the mountains will increase the chances of ascents and descents. These elements will be encountered as some sort of enemies sending malus to the characters stats, and skills will be available to eliminate them or convert them into bonuses.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1053/roguelite.png">
      <figcaption></figcaption>
  </figure>

<p>At each stage, between travel phases, visual-novel-style gameplay will be used to explore the towns and various locations in which the embodied cycling team stops. In addition to encounters with NPCS, dialogue trees will sometimes propose an area exploration system and generally will modify the statistics of roleplay elements according to decisions made, as can be done in <a href="https://moralanxietystudio.com/">Roadwarden</a> or <a href="https://discoelysium.com/">Disco Elysium</a>.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1053/rpg.png">
      <figcaption></figcaption>
  </figure>

<p>We've also been working a lot on a sci-fi story set in a world finally decarbonized after a bitter struggle against a globalized thermo-fascist regime. A sort of “sweat-punk” utopia (like a variation on solar punk about Human-powered propulsion and energy, including lots of pneumatics and an obsession with bicycles) set after a dystopia inspired by our contemporary situation.</p>

<figure><img alt="" src="https://the-wind-through-the-wheels.com/site/assets/files/1053/low_tech.png" width="800" />
<figcaption>Lowtech Magazine, Human powered air compressor and energy storage system. Photo by Andy Lagzdins.</figcaption>
</figure>

<p>We've been working on this theme with references like Low-tech magazine and our reading of A Psalm for the Wild-Built in mind. We've also recently started reading specialized science fiction on feminism and cycling from Microcosm Publishing's “Bikes in space” catalog (thanks a lot Fisk for this discovery), which will surely inspire us for the rest of our narrative work.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1053/microcosm_publishing.png">
      <figcaption></figcaption>
  </figure>

<p>We are excited about the next step. Adel is planning to reduce his professional time to do what he can on the project, keeping his fingers crossed that it will be a fun game. The idea is to make a demo, share things online while making it and see if there's a chance for some crowd based funding or why not find a publisher to finance the rest of the production (hoping we are not daydreaming).</p>]]></content:encoded>
		<link>https://the-wind-through-the-wheels.com/blog/a-game-design-document-for-the-wind-through-the-wheels/</link>
		<guid>https://the-wind-through-the-wheels.com/blog/a-game-design-document-for-the-wind-through-the-wheels/</guid>
	</item>
	<item>
		<title>Development of a pseudo 3D circuit</title>
		<description><![CDATA[]]></description>
		<pubDate>Tue, 07 Jan 2025 00:00:00 +0000</pubDate>
		<content:encoded><![CDATA[<p>Dans l'idée d'un scénario où on serait directement dans une course, nous imaginons la ponctuer d'évènements qui prendraient la forme de mini-jeux. Les membres de l'équipe pourraient alors proposer des solutions, chercher dans leurs souvenirs afin de réussir les mini-jeux et ainsi avancer progressivement dans le jeu.</p>

<p>Ces mini-jeux pourraient ouvrir à des possibilités graphiques et interactives autres que la vue de profil. Une idée de mini-jeu serait d'évoquer le jeu <a href="https://en.wikipedia.org/wiki/Out_Run">Out Run</a> en reprenant le principe d'une caméra derrière le personnage et la route en pseudo 3D. Le principe pourrait être d'éviter des obstacles, de ramasser des objets, de prendre l'aspiration.</p>

<p>Nous avons trouvé quelques références qui détaillent la manière de s'y prendre pour calculer la projection d'éléments 2D selon les positions d'une caméra et de l'écran afin de produire un effet de 3D :</p>

<ul>
	<li><a href="http://www.extentofthejam.com/pseudo/">http://www.extentofthejam.com/pseudo/</a></li>
	<li><a href="https://github.com/jakesgordon/javascript-racer/" rel="noreferrer noopener" target="_blank">https://github.com/jakesgordon/javascript-racer/</a></li>
	<li><a href="https://github.com/ssusnic/Pseudo-3d-Racer" rel="noreferrer noopener" target="_blank">https://github.com/ssusnic/Pseudo-3d-Racer</a></li>
	<li><a href="https://www.youtube.com/watch?v=N60lBZDEwJ8" rel="noreferrer noopener" target="_blank">https://www.youtube.com/watch?v=N60lBZDEwJ8</a></li>
</ul>

<p>Nous avons donc développer une version demo en JS dont voici une archive vidéo :</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1052/2025_01_07_pseudo_3d_circuit.mp4" type="video/mp4">
    </video>
    </figure>

<p>Pour améliorer tout ça, on pourrait :</p>

<ul>
	<li>gérer le déplacement via le concept de vecteur</li>
	<li>intégrer un calcul de forces à vaincre pour avancer à la manière dont on l'a fait dans <a href="https://the-wind-through-the-wheels.com/blog/development-of-a-physics-engine/">Development of a physics engine</a></li>
	<li>intégrer un fond et de la parallaxe</li>
	<li>intégrer des décors autour de la route et sur la route</li>
</ul>]]></content:encoded>
		<link>https://the-wind-through-the-wheels.com/blog/development-of-a-pseudo-3d-circuit/</link>
		<guid>https://the-wind-through-the-wheels.com/blog/development-of-a-pseudo-3d-circuit/</guid>
	</item>
	<item>
		<title>Development of a physics engine</title>
		<description><![CDATA[]]></description>
		<pubDate>Mon, 25 Nov 2024 00:00:00 +0000</pubDate>
		<content:encoded><![CDATA[<p>Dans un article précédent, nous avons vu que pour déplacer le cycliste, trois forces nous intéressaient : la force de la pente, la force du vent et la force de frottement. Nous avons alors fait des calculs pour estimer les puissances à vaincre afin d'avancer.</p>

<p>Cependant, nous avions des difficultés à intégrer aisément ces calculs au sein d'une technique de rendu graphique pour un jeu vidéo (l'élément HTML Canvas par exemple) afin de faire bouger un cycliste dans un environnement. C'est pourquoi nous avons regardé plutôt la manière dont on peut convervoir un moteur physique avec des langages de programmation. Le livre et le site <a href="https://natureofcode.com/">Nature of code</a> de Daniel Shiffman a été d'une grande aide. Nous avons surtout regardé les parties sur les vecteurs et les forces.</p>

<p>La vidéo ci-dessous montre une version de démonstration d'un moteur physique. On peut changer l'inclinaison de la pente, la vitesse du vent et la qualité de la route. Ces changements sont pris en compte dans les calculs des forces de la pente, du vent et du frottement. La logique des vecteurs permet d'ajouter une série de forces que la force du pédalage doit vaincre pour avancer.</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1051/2024_11_25_physics_engine.mp4" type="video/mp4">
    </video>
    </figure>

<p>Les variables sont modifiées via des touches du clavier. Voici le détail de la signification du changement de l'objet qui bouge :</p>

<ul>
	<li>Forme carrée : le cycliste est en roue libre</li>
	<li>Forme ronde : le cycliste pédale</li>
	<li>Forme triangulaire : le cycliste freine</li>
</ul>

<p>Ces débuts sont plutôt prometteurs. Pour améliorer tout ça, on pourrait :</p>

<ul>
	<li>intégrer plus de variables dans le calcul des forces</li>
	<li>définir un équivalent de vitesse à laquelle se déplace le cycliste</li>
	<li>intégrer une force ou une variable liée à la santé du cycliste</li>
	<li>intégrer la possibilité de pédaler plus fort ou bien de freiner plus fort</li>
	<li>intégrer un calcul de puissance à partir des données de force et de vitesse</li>
	<li>utiliser l'intégration de Verlet plutôt que la méthode d'Euler pour calculer le changement de position du cycliste</li>
</ul>]]></content:encoded>
		<link>https://the-wind-through-the-wheels.com/blog/development-of-a-physics-engine/</link>
		<guid>https://the-wind-through-the-wheels.com/blog/development-of-a-physics-engine/</guid>
	</item>
	<item>
		<title>Modeling training</title>
		<description><![CDATA[]]></description>
		<pubDate>Tue, 12 Nov 2024 00:00:00 +0000</pubDate>
		<content:encoded><![CDATA[<p>Nous avons consulté ces deux articles afin de comprendre comment pouvait être modéliser un entraînement en endurance :</p>

<ul>
	<li>Banister EW, Calvert TW, Savage MV, et al. A systems model of training for athletic performance, <em>Aust J Sports Med</em> 1975;7:57–61.</li>
	<li>Murray NB, Gabbett TJ, Townshend AD, et al, Calculating acute:chronic workload ratios using exponentially weighted moving averages provides a more sensitive indicator of injury likelihood than rolling averages, <em>British Journal of Sports Medicine</em> 2017;51:749-754.</li>
</ul>

<p>Nous avons également regardé comment était calculée la charge Coggan.</p>

<p>Nous nous sommes ainsi concentrés sur le modèle condition physique/fatigue. Il consiste à calculer la condition physique et la fatigue par rapport à des cycles d'entraînement. La condition physique est calculée sur un cycle à moyen terme et la fatigue sur un cycle à court terme. La soustraction de la conditition physique et de la fatigue donne une indication de la forme.</p>

<p>Ci-dessous, des détails pour :</p>

<ul>
	<li>calculer de la charge d'un entraînement</li>
	<li>calculer fatigue, la condition physique et la forme</li>
</ul>

<h2><strong>Calcul de la charge d'un entraînement</strong></h2>

<p>La charge d'entraînement est un indicateur chiffré de l'effort qui a dû être réalisé pour un entraînement. Pour ces calculs, il faut avoir une valeur limitante propre à un individu. C'est un seuil à partir duquel un effort ne peut plus être maintenue dans la durée. Cela peut être la vitesse ou bien la puissance (par exemple) qui peuvent être maintenues pendant une heure d'effort. La durée choisie aura pour conséquence de valoriser des entraînements au-delà de cette durée.</p>

<pre>
var treshold_value;    // km/h, W, etc
var training_duration; // h
var training_value;    // km/h, W, etc
var training_intensity = training_value / treshold_value;
var training_score = ((training_duration * training_value  * training_intensity) / treshold_value) * 100;</pre>

<p>La valeur de seuil est appelée "treshold_value". La valeur "training_value" doit être dans la même unité.</p>

<h2><strong>Calcul de la fatigue</strong></h2>

<p>La fatigue correspond à une charge d'entraînement de cours terme. Ici on la calcule sur un cycle de 7 jours. On prend l'unité de temps "un jour" pour calculer la fatigue, la condition et la forme. Du coup, quand on parle de la fatigue précédente, on parle de la fatigue du jour précédent.</p>

<pre>
var fatigue = previous_fatigue + ((training_score - previous_fatigue) / 7)</pre>

<p>On calcule la fatigue tous les jours. Si "previous_fatigue" n'existe pas encore, on commence à 0, sinon on prend la valeur du jour précédent. La fatigue est généralement comprise en 0 et 50. Elle ne peut pas être négative. Proche de 0, la valeur n'est pas très haute, au-delà de 50 elle est importante.</p>

<h2><strong>Calcul de la condition physique</strong></h2>

<p>La condition physique correspond à une charge d'entraînement de moyen terme. Ici on la calcule sur un cycle de 42 jours.</p>

<pre>
var fitness = previous_fitness + ((training_score - previous_fitness) / 42);</pre>

<p>On calcule la condition physique tous les jours même si elle est plutôt pertinente à 42 jours. Si "previous_fitness" n'existe pas encore, on commence à 0, sinon on prend la valeur du jour précédent. Elle ne peut pas être négative. Proche de 0, la valeur n'est pas très haute, au-delà de 50 elle est importante.</p>

<h2><strong>Calcul de la forme</strong></h2>

<p>La forme est calculée par la différence entre la condition physique et la fatigue.</p>

<pre>
var form = fitness - fatigue;</pre>

<p>La valeur de la forme peut être entre -30 et 20. Pour s’entraîner de façon optimale, il est intéressant d'être entre -10 et -30. La fatigue est donc au-dessus de la condition physique. Mais pas trop, sinon au-delà de -30, des risques de blessures peuvent arriver. Pour arriver en forme à un évènement, il faut cependant réduire la fatigue. Alors si la valeur de la forme passe au-dessus de 5, elle manifeste un certain niveau de fraîcheur. C'est-à-dire qu'on a une fatigue inférieure à la condition physique : on a troqué de la fatigue contre de la fraîcheur.</p>

<p>Il s'agit donc d'équilibrer la fatigue par rapport à la condition physique (les cycles cours par rapport aux cycles moyens) pour progresser et ensuite créer de la fraîcheur.</p>]]></content:encoded>
		<link>https://the-wind-through-the-wheels.com/blog/modeling-training/</link>
		<guid>https://the-wind-through-the-wheels.com/blog/modeling-training/</guid>
	</item>
	<item>
		<title>Some good news and a roadmap</title>
		<description><![CDATA[]]></description>
		<pubDate>Wed, 03 Apr 2024 00:00:00 +0000</pubDate>
		<content:encoded><![CDATA[<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/cover.png">
      <figcaption></figcaption>
  </figure>

<p>Last summer we (Adel and Vincent) applied for a grant from the CNC (The French National Centre for Cinema and Moving Images) to finance the game design conception and writing of The Wind Through the Wheels, and it was accepted!</p>

<p>We received this news in December 2023, signed the contract in February and received 75% of the money last month.</p>

<p>It's €10,000, which we split 50/50. It won't be enough to finish the game, but it will allow us to work on it part-time until 2025. It's a great start for the game!</p>

<p>I (Adel) feel very fortunate to be able to work on a game with a friend, and I'm convinced that all the support I've received since I started sharing my work has contributed greatly to this situation. I'm very grateful to everyone who follows my work and encourages me with their compliments, comments, messages and questions. It has really changed the way I work and made me feel legitimate in what I do. Two years ago, I would never have dared to ask an institution for funding.</p>

<p>The CNC gave us a summary of their deliberations. They felt that our project stood out for its originality and the quality of its visual direction. They were interested in the fact that the initial narrative and ASCII display raised environmental concerns. They also expressed some concerns about the effectiveness of the gameplay, the feasibility of an ASCII display and the need for more in-depth narrative work.</p>

<p>We now have one year to work on defining the game and turning it into a game design document. This needs to be a 40-50 page document describing the narrative, game mechanics and art direction in as much detail as possible. We also need to keep track of the chronology of our work and specify our spending on the project.</p>

<p>To give you an idea of what we sent to the CNC, here's the PDF we submitted [link]</p>

<h3>Our roadmap</h3>

<p>As well as writing the game, we want to produce a demo that can be used as the basis for a crowdfunding campaign so that we can continue to work on the game. We hope to achieve this before 2025, although we still have a lot of work to do before we get there.</p>

<p>Beyond these goals, we want to continue to work on things in a free and experimental way. This applies to the narrative, the gameplay and the visual direction. What will not change is the text mode rendering of the game's graphics, the cycling theme, and a gameplay that is mainly based on exploring and training in side view.</p>

<p>For example, we will soon be trying to render game visuals in a coloured raster style, and on the writing side we are working on a sci-fi theme where humanity has abandoned fuel-based technologies for human motricity and penumatic-based tools. A kind of Solarpunk derivative, something like Rollerpunk, Airpunk or maybe Sweatpunk?</p>

<h3>A devlog</h3>

<p>Today we launched our devlog <a href="https://the-wind-through-the-wheels.com/" rel="noreferrer noopener">https://the-wind-through-the-wheels.com/</a> where we will publish our progress. This site is available in French and English. We have already published two posts which are the two threads about the game we published previously on social media. To easily follow our news, we have set up an RSS feed <a href="https://the-wind-through-the-wheels.com/rss/" rel="noreferrer noopener">https://the-wind-through-the-wheels.com/rss/</a></p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/blog.png">
      <figcaption></figcaption>
  </figure>

<p>An article on the mathematics of cycling we are using for the gameplay will be published soon.</p>

<p>We have also re-posted the May 2023 article on Velvetyne about the Jgs Font, the font used for the game's rendering, this article also talks more broadly about ASCII art, some of its artists and history.</p>

<p>The design of this blog is probably temporary, very Web 1.0, it aims to recall the mood of the oldschool web and operating systems of the 90s, the period when the ASCII art scene emerged on Usenet. Still, this style might be a bit harsh for a game promotion.</p>

<h2>February-March progress</h2>

<p>We haven't shared any news from the project on social media since February, but there has been progress on several aspects of the game.</p>

<h3>A first stage in the making</h3>

<p>We started a first stage of the A first stage in the makinggame. This involved integrating the 3D landscapes generated from the topographical data we had, integrating a physics engine that translates the player's state into speed, power and distance, and creating a minimal physiological system to simulate the cyclist's endurance. This physiological system could lead us to a survival/simulation style of gameplay, perhaps requiring precise management of nutrition, hydration, rest, bike maintenance, etc. This type of gameplay seems appropriate for the contemplative aspect we want to focus on. In the same spirit, we think of games like Oregon Trail or Caribbean Sail for their mechanics of waiting, travelling and survival. We are also thinking of Lone Sails and how the scrolling of the landscape is at the heart of the gameplay. In a more RPG style, we are really into the writing of Roadwarden.</p>

<h3>Progress on the game engine</h3>

<p>While working on this first stage, we continue to work on the game engine. It's like a project within a project, we'd like to end up releasing it under a free licence and with enough documentation to ensure that it can be used by other people for other projects.</p>

<p>The short demo "A Very Bold Character" released by Adel last month (link) was a pretext for more extensive experimentation with the engine's capabilities.</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1049/2024-02-23_15-14-38.mp4" type="video/mp4">
    </video>
    </figure>

<p>This engine is called Textor and, apart from its use in The Wind Through the Wheels, it is used as the basis for a text-mode image editor that Adel uses for his latest artworks, experimenting with a bitmap rendering with colours as an alternative to the game's current black-and-white ASCII art.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/screenshot_2024-01-25_at_15-25-16_screenshot.png">
      <figcaption></figcaption>
  </figure>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/algorave_2024_screen_purple.png">
      <figcaption></figcaption>
  </figure>

<p>In its latest version, Textor allows the same interactive features for both pure text and bitmap rendering.</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1049/textmode_kittens_low.mp4" type="video/mp4">
    </video>
    </figure>

<p>At some point there will be a more specific article on the development of Textor.</p>

<h3>What else we're working on</h3>

<p>We also started researching graphics, atmosphere and colours. The challenge is finding a visual style that extends or matches the ASCII artwork.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/ff.png">
      <figcaption></figcaption>
  </figure>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/cross_stitch.jpg">
      <figcaption></figcaption>
  </figure>

<p>Another big work in progress is the writing of the game's story. We started by writing short novels.</p>

<p>Some characters, places and events begin to emerge. We must give them characteristics, speech, geographical locations, specific environments. As stated above, the main theme is that humanity has chosen to move away from fossil fuels. We are exploring this in our novels. We have started three of them: one in which the main character encounters a farming community that uses only human motor power for work, another about people who are building their lives around a water source found in an abandoned oil field, and one in which the protagonist discovers a kind of mental superpower that allows him to create a kind of projection in different environments.</p>

<p>To write all this, we are documenting alternative energy sources, ways of travelling, pre-industrial ways of farming, alternative ways of living with animals, how to decontaminate industrial waste. We also read some science fiction. For example, we've read Becky Chamber's <em>A Psalm for the Wild-Built</em>, 2021, and R. F. Kuang's <em>Babel, or the Necessity of Violence</em>, 2022. We also read older books such as Edward Bellamy's <em>Looking Backward: 2000-1887</em>, 1888, or William Morris's <em>News from Nowhere</em>, 1890.</p>

<p>Finally, with the aim of creating urban landscapes, we have been working on an ASCII art facade generator. This still needs some work, but we hope to release it as an independent tool under a free licence at some point.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/facade_generator_0.png">
      <figcaption></figcaption>
  </figure>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/facade_generator_1.png">
      <figcaption></figcaption>
  </figure>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/facade_generator_2.png">
      <figcaption></figcaption>
  </figure>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/facade_generator_3.png">
      <figcaption></figcaption>
  </figure>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1049/facade_generator_4.png">
      <figcaption></figcaption>
  </figure>]]></content:encoded>
		<link>https://the-wind-through-the-wheels.com/blog/some-good-news-and-a-roadmap/</link>
		<guid>https://the-wind-through-the-wheels.com/blog/some-good-news-and-a-roadmap/</guid>
	</item>
	<item>
		<title>Calculating power and speed on a bike</title>
		<description><![CDATA[In order to move the cyclist, we want to take into account the effects of the wind, the slope and the athlete&#x00027;s health. We also want to be able to measure the physiological effort made by the athlete. To do this, we need to calculate the forces that have to be overcome to move.]]></description>
		<pubDate>Wed, 07 Feb 2024 00:00:00 +0000</pubDate>
		<content:encoded><![CDATA[<p>In order to move the cyclist, we want to take into account the effects of the wind, the slope and the athlete's health. We also want to be able to measure the physiological effort made by the athlete. To do this, we need to calculate the forces that have to be overcome to move. There are at least three forces to take into account: the force of the air, the force of the wind and the force of friction. So we're going to talk about speed and power. Speed refers to displacement in time and power to energy expended in time.</p>

<p>We started this work with realistic calculations. The websites of Jacques <a href="http://www.velomath.fr/dossier_velo_equation/velo_equation.html" rel="noreferrer noopener" target="_blank">Jacques Fine</a> and <a href="http://bernard.mischler.free.fr/equacycle/exemple.htm" rel="noreferrer noopener" target="_blank">Bernard Mischler</a> were a great help in developing the calculations. The general principle is to be able to switch from a speed (km/h) to a power (W) and vice versa. So, for a given power and depending on the conditions, we can find out how fast a cyclist is travelling. We have called these conditions "performance factors".</p>

<pre>
var performance_factors_values = {
    health: 0,                // float
    athlete_position: 0.4,    // float
    athlete_weight: 75,       // kg

    bike_condition: 0.01,     // float
    bike_weight: 10,          // kg
    
    road_condition: 0.004,    // float
    slope_gradient: 0,        // %
    g_force: 9.81,            // m/s2
    
    real_wind_speed: 0,       // km/h
    air_temperature: 20,      // °C
    air_pressure: 101325,     // Pa
    air_molar_mass: 0.028965, // kg/mol
    gas_constant: 8.3144621,  // J·K-1·mol-1
}</pre>

<p>The object above lists a set of performance factors and values that are useful for starting the calculations. For example, we've chosen a bike weighing 10kg, a wind speed of 0km/h and a temperature of 20°C. These performance factors are variable: the friction of the road, the condition of the bike and the position of the athlete can all change and therefore affect performance differently. Even the force of gravity can vary if we choose to send our cyclist to the Moon...</p>

<p>So we've created a set of JavaScript functions that take this object as an argument. Here's the function that calculates the influence of the slope:</p>

<pre>
function calc_slope_power(values) {
    var v = values;
    var slope_power = v.speed * (v.athlete_weight + v.bike_weight) * v.g_force * v.slope_gradient / 100;
    return slope_power;
}</pre>

<p>By adding a series of functions that calculate power, we then obtain the power required to move the cyclist. Calculating power as a function of speed is easier than calculating speed as a function of power. The latter requires us to solve a third-degree polynomial, which we have done by adopting a numerical solution method.</p>

<p>Once all these calculations were in place, we developed a tool to visualise the results. It takes the form of two graphs showing speeds as a function of power output. The first graph shows the speed in relation to the slope and the second the speed in relation to the wind.</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1047/graph_1.mp4" type="video/mp4">
    </video>
    </figure>

<p>We have also added inputs so that we can vary the performance factors. For example, we can see the effect of the athlete's weight on the speed achieved for a given power output.</p>

<p>We then added an input to manage inertia. The previous speed is taken into account to improve or reduce the new speed. If the cyclist was stationary, he will have a penalty when he tries to move. On the other hand, if their previous speed was high, they will have a bonus. We have also taken into account the inertia involved in a slope: it's better to arrive on a hill in a hurry.</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1047/graph_2.mp4" type="video/mp4">
    </video>
    </figure>

<p>We think this approach is an interesting way of estimating cyclist effort. It will be possible to calculate training loads and deduce risks of injury, fatigue or physical fitness.</p>]]></content:encoded>
		<link>https://the-wind-through-the-wheels.com/blog/calculating-power-and-speed-on-a-bike/</link>
		<guid>https://the-wind-through-the-wheels.com/blog/calculating-power-and-speed-on-a-bike/</guid>
	</item>
	<item>
		<title>Design and rendering of roads and landscapes in ASCII art from topographic data</title>
		<description><![CDATA[With Vincent Maillard, we worked on how to build and render the road and its background landscapes in The Wind Though the Wheels.]]></description>
		<pubDate>Fri, 19 Jan 2024 00:00:00 +0000</pubDate>
		<content:encoded><![CDATA[<p>With Vincent Maillard, we worked on how to build and render the road and its background landscapes in The Wind Though the Wheels. Using the “ascii smooth lines” system I introduced last month, we focused on approaching the landscape as layers of relief profiles projected into space.</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1040/render_relief_roads_wind.mp4" type="video/mp4">
    </video>
    </figure>

<p>We created some sort of shader that renders ASCII relief volumes using arrays of 2D coordinates projected into space. The first two relief arrays in the data are used for the roadside.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1040/relief_profiles.png">
      <figcaption></figcaption>
  </figure>

<p>Once the 3D environment of the scene is in place, it’s a matter of finding the right XYZ scale, balancing geographical realism, the length of the race, the difficulty and the relevance of the viewpoint. Perhaps these factors will be something that the player can modify during the game as special powers or abilities?</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1040/scaling_relief.mp4" type="video/mp4">
    </video>
    </figure>

<p>Beyond the rendering of roads and landscapes, there is the issue of their design. It’s quite difficult to create consistent landscape data by hand, so we started using data from Open Elevation. As a test, we used it to model the relief around Retournac, a town near where we live.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1040/open_elevation_relief_retournac.png">
      <figcaption></figcaption>
  </figure>

<p>Using existing rides (from Open Runner data) as a starting point for designing stages is a neat aspect of the method.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1040/open_runner_0.png">
      <figcaption></figcaption>
  </figure>

<p>However, our way of visualising cycling from a side view means that we flatten out the road from all its bends, so we can’t build a coherent stage from unmodified geographical data. We will design stages by modifying and interpolating cycle route reliefs and selected or generated landscapes that are not geographically coherent at first.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1040/interpolation.png">
      <figcaption></figcaption>
  </figure>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1040/render_relief_roads_wind.mp4" type="video/mp4">
    </video>
    </figure>]]></content:encoded>
		<link>https://the-wind-through-the-wheels.com/blog/design-and-rendering-of-roads-and-landscapes-in-ascii-art-from-topographic-data/</link>
		<guid>https://the-wind-through-the-wheels.com/blog/design-and-rendering-of-roads-and-landscapes-in-ascii-art-from-topographic-data/</guid>
	</item>
	<item>
		<title>Rendering ASCII smooth lines using character subdivision</title>
		<description><![CDATA[I worked on rendering smooth lines in ASCII art using character subdivision.]]></description>
		<pubDate>Fri, 22 Dec 2023 00:00:00 +0000</pubDate>
		<content:encoded><![CDATA[<p>I worked on rendering smooth lines in ASCII art using character subdivision.</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1035/spider.mp4" type="video/mp4">
    </video>
    </figure>

<p>Each character is subdivided into rounding positions to determine the entry and exit points of a line.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1035/char_nodes.png">
      <figcaption></figcaption>
  </figure>

<p>I’ve added 65 special characters to the Jgs font corresponding to these junction points.</p>

<figure>
      <img src="https://the-wind-through-the-wheels.com/site/assets/files/1035/sub_chars.png">
      <figcaption></figcaption>
  </figure>

<p>I used line equations like y = slope * (x - aX) + aY and sort functions to find these in and out between two given points to render these smooth lines. And because I am very bad at maths this step took me almost an entire week…</p>

<figure>
    <video preload="metadata" controls="">
        <source src="https://the-wind-through-the-wheels.com/site/assets/files/1035/smooth_line.mp4" type="video/mp4">
    </video>
    </figure>

<p>This feature should be very useful for road rendering in The Wind Through the Wheels, in particular finally being able to render road crossings in the player’s path.</p>]]></content:encoded>
		<link>https://the-wind-through-the-wheels.com/blog/rendering-ascii-smooth-lines-using-character-subdivision/</link>
		<guid>https://the-wind-through-the-wheels.com/blog/rendering-ascii-smooth-lines-using-character-subdivision/</guid>
	</item>
</channel>
</rss>