Skip to content

Commit 0d36ac1

Browse files
committed
updates and news entry
1 parent 10d2ec5 commit 0d36ac1

17 files changed

Lines changed: 158 additions & 119 deletions

_includes/header.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<header class="branding">
22
<img src="/assets/images/wurst_icon64.png" class="logo">
3-
<a class="branding-text" href="/">
3+
<a class="branding-text" href="{{ '/' | relative_url }}">
44
<span class="text-highlight">{{ site.branding.highlight }}</span><span class="text-bold">{{ site.branding.bold }}<br></span>
55
</a>
66
<nav>
7-
<a class="nav-link" href="/start">Installation</a>
8-
<a class="nav-link" href="/documentation">Documentation</a>
9-
<a class="nav-link" href="/community">Community</a>
10-
<a class="nav-link" href="/news">News</a>
7+
<a class="nav-link" href="{{ '/start.html' | relative_url }}">Installation</a>
8+
<a class="nav-link" href="{{ '/documentation.html' | relative_url }}">Documentation</a>
9+
<a class="nav-link" href="{{ '/community.html' | relative_url }}">Community</a>
10+
<a class="nav-link" href="{{ '/news.html' | relative_url }}">News</a>
1111
<a class="nav-link" href="https://bin.wurstlang.org/">Pastebin</a>
1212
</nav>
1313
<div class="header-spacer"></div>

_layouts/doc.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<a href="{{ '/' | relative_url }}">Home</a>
2828
</li>
2929
<li>
30-
<a href="{{ '/documentation' | relative_url }}">Documentation</a>
30+
<a href="{{ '/documentation.html' | relative_url }}">Documentation</a>
3131
</li>
3232
<li class="active">{{ page.title }}</li>
3333
</ol>

_layouts/home.html

Lines changed: 37 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -55,51 +55,43 @@ <h2 class="title">Why Wurst?</h2>
5555
<p>WurstScript is a programming language and modding toolkit used to create Warcraft III maps with ease.
5656
It supports Warcraft III reforged and older versions by producing either Jass or Lua code.</p>
5757

58-
<div class="tabbed">
59-
<input type="radio" id="tab1" name="css-tabs" checked>
60-
<input type="radio" id="tab2" name="css-tabs">
61-
<input type="radio" id="tab3" name="css-tabs">
62-
63-
<ul class="tabs">
64-
<li class="tab"><label for="tab1">Look and Feel</label></li>
65-
<li class="tab"><label for="tab2">Compiletime</label></li>
66-
<li class="tab"><label for="tab3">Optimizations</label></li>
67-
</ul>
68-
69-
<div class="tab-content">
70-
<h4>WurstScript is a strongly typed language with indentation syntax. </h4>
71-
<pre class="language-wurst">
72-
<code class="language-wurst">init
73-
EventListener.onCast(ABIL_ID) caster ->
74-
forUnitsOfPlayer(caster.getOwner()) u ->
75-
u..addMana(100)
76-
..addHP(100)
77-
..addEffect(Abilities.faerieFireTarget, AttachmentPoints.chest)</code>
78-
</pre>
79-
</div>
80-
81-
<div class="tab-content">
82-
<h4>WurstScript supports interpreting code at compiletime. This includes the generation of map data objects, such as units, abilities and items.</h4>
83-
<pre class="language-wurst">
84-
<code class="language-wurst">constant UNIT_ID = compiletime(UNIT_ID_GEN.next)
85-
86-
@compiletime
87-
function createUnit()
88-
new ZombieDefinition(UNIT_ID, UnitIds.dalaranmutant)
89-
..setName("Custom Unit")
90-
..setArmorType(ArmorType.Unarmored)
91-
..setAttack1TargetsAllowed(commaList(TargetsAllowed.ground, TargetsAllowed.structure, TargetsAllowed.debris))
92-
</code>
93-
</pre>
94-
</div>
95-
<div class="tab-content">
96-
<h4>WurstScript differentiates itself in the Warcraft III map development landscape through its powerful inbuilt optimizers and a robust build pipeline. This makes WurstScript an ideal choice for developers aiming for both performance and convenience.</h4>
97-
<ul class="why-list">
98-
<li><strong>Constant and Copy Propagation:</strong> Simplifies code by substituting variables with their known constant values, reducing runtime complexity.</li>
99-
<li><strong>Branch & Variable Merging:</strong> Optimizes code structure by merging compatible variables and control flow branches, leading to more efficient execution paths. </li>
100-
<li><strong>Function & Variable Inlining:</strong> Increases execution speed by integrating small functions directly into their calling locations, minimizing function call overhead. </li>
101-
</ul>
102-
</div>
58+
<p class="why-special">
59+
Built for serious Warcraft III projects: expressive language design, compiletime generation, and performance-first compilation.
60+
</p>
61+
62+
<div class="why-feature-stack">
63+
<article class="why-feature">
64+
<div class="why-feature-icon"><i class="fa fa-code"></i></div>
65+
<div class="why-feature-text">
66+
<p class="why-feature-key">Type System</p>
67+
<h3>Write map logic that stays maintainable.</h3>
68+
<p>Strong typing + clean syntax + extension methods.</p>
69+
<pre class="language-wurst why-inline-code"><code class="language-wurst">u..addMana(100)
70+
..addHP(100)</code></pre>
71+
</div>
72+
</article>
73+
74+
<article class="why-feature">
75+
<div class="why-feature-icon"><i class="fa fa-cube"></i></div>
76+
<div class="why-feature-text">
77+
<p class="why-feature-key">Compiletime</p>
78+
<h3>Generate map objects before runtime.</h3>
79+
<p>Create units, abilities, and items from code with consistent IDs and less manual editor work.</p>
80+
<pre class="language-wurst why-inline-code"><code class="language-wurst">@compiletime
81+
new ZombieDefinition(UNIT_ID, UnitIds.dalaranmutant)</code></pre>
82+
</div>
83+
</article>
84+
85+
<article class="why-feature">
86+
<div class="why-feature-icon"><i class="fa fa-tachometer"></i></div>
87+
<div class="why-feature-text">
88+
<p class="why-feature-key">Optimization Pipeline</p>
89+
<h3>Ship lean Jass or Lua output.</h3>
90+
<p>Built-in propagation, inlining, and merge passes reduce overhead without hand-tuning every script.</p>
91+
<pre class="language-wurst why-inline-code"><code class="language-wurst">// fewer calls after inlining
92+
fastDamage(target, amount)</code></pre>
93+
</div>
94+
</article>
10395
</div>
10496
</div>
10597

_layouts/newsarticle.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
<a href="{{ '/' | relative_url }}">Home</a>
2828
</li>
2929
<li>
30-
<a href="{{ '/news' | relative_url }}">News</a>
30+
<a href="{{ '/news.html' | relative_url }}">News</a>
3131
</li>
3232
<li class="active">{{ page.title }}</li>
3333
</ol>

_layouts/stdlibdoc.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<a href="{{ '/' | relative_url }}">Home</a>
2727
</li>
2828
<li>
29-
<a href="{{ '/stdlib' | relative_url }}">Standard Library</a>
29+
<a href="{{ '/stdlib.html' | relative_url }}">Standard Library</a>
3030
</li>
3131
<li class="active">{{ page.title }}</li>
3232
</ol>

_news/march-2026-tooling-update.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
title: VSCode + JassDoc + Performance Update
3+
excerpt: Tooling and performance improvements across WurstScript.
4+
date: 2026-03-03
5+
image: /assets/images/news/wurst-perfect.png
6+
layout: newsarticle
7+
author: Frotty
8+
---
9+
10+
11+
Today's release focuses on developer workflow and reliability.
12+
13+
## Better VSCode Workflow
14+
15+
We expanded VSCode integration to reduce context switching and make the day-to-day edit/build/test loop smoother. More project actions are now available directly in the editor workflow, so common tasks need fewer manual steps and less setup friction.
16+
17+
Rich highlight support via inlay hints was also improved, making important type and code-flow details visible directly while editing.
18+
19+
![](/assets/images/news/run-btn.webp){: .img-responsive}
20+
21+
The overall goal was to keep focus in one place: write code, run, iterate, and inspect results without jumping between tools.
22+
23+
## JassDoc for Natives
24+
25+
We integrated [JassDoc](https://github.com/lep/jassdoc), a cool community project, directly into the tooling.
26+
27+
If JassDoc is available for a native, or if a function is a pure wrapper around that native, the JassDoc entry is shown in documentation info. This gives faster context while coding and reduces the need to search external references.
28+
29+
## Faster Builds and Fixes
30+
31+
This update includes targeted performance work across the compiler/toolchain plus a broad set of bug fixes. The optimization focus is on keeping compile times lower for real projects and reducing overhead in repeated build cycles.
32+
33+
Alongside speedups, we addressed reliability issues to make diagnostics and generated output more predictable.

_sass/landing.scss

Lines changed: 79 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -142,81 +142,80 @@
142142

143143
}
144144

145-
.tabbed {
146-
overflow-x: visible;
147-
margin: 32px 0;
148-
padding-bottom: 16px;
145+
.why-special {
149146
width: 100%;
147+
margin: 6px 0 18px;
148+
color: var(--text-color-secondary);
150149
}
151150

152-
.tabbed [type="radio"] {
153-
/* hiding the inputs */
154-
display: none;
155-
}
156-
157-
.tabs {
158-
display: flex;
159-
align-items: stretch;
160-
list-style: none;
161-
padding: 0;
162-
border-bottom: 1px solid var(--divider-dark);
163-
gap: 2px;
164-
flex-wrap: wrap;
165-
}
166-
.tab > label {
167-
display: block;
168-
margin-bottom: -1px;
169-
padding: 12px 15px;
170-
border: 1px solid var(--divider-dark);
171-
background: var(--divider-darker);
172-
color: var(--text-color);
173-
font-size: 12px;
174-
font-weight: 600;
175-
text-transform: uppercase;
176-
letter-spacing: 1px;
177-
cursor: pointer;
178-
transition: all 0.3s;
179-
border-top-left-radius: 8px;
180-
border-top-right-radius: 8px;
181-
}
182-
.tab:hover label {
183-
border-top-color: var(--text-color-secondary);
184-
color: var(--text-color-dark);
151+
.why-feature-stack {
152+
width: 100%;
153+
margin-top: 10px;
154+
display: flex;
155+
flex-direction: column;
156+
gap: 12px;
185157
}
186158

187-
.tab-content {
188-
display: none;
189-
color: var(--text-color-secondary);
190-
width: 100%;
191-
min-height: 260px;
159+
.why-feature {
160+
display: grid;
161+
grid-template-columns: 72px 1fr;
162+
gap: 14px;
163+
padding: 18px;
192164
border: 1px solid var(--divider-dark);
193-
border-top: none;
194-
border-radius: 0 0 10px 10px;
195-
padding: 16px 20px;
196-
background: var(--smoky-white);
197-
}
165+
border-radius: 12px;
166+
background: linear-gradient(180deg, #f9fbfd 0%, var(--smoky-white) 100%);
198167

199-
/* As we cannot replace the numbers with variables or calls to element properties, the number of this selector parts is our tab count limit */
200-
.tabbed [type="radio"]:nth-of-type(1):checked ~ .tabs .tab:nth-of-type(1) label,
201-
.tabbed [type="radio"]:nth-of-type(2):checked ~ .tabs .tab:nth-of-type(2) label,
202-
.tabbed [type="radio"]:nth-of-type(3):checked ~ .tabs .tab:nth-of-type(3) label,
203-
.tabbed [type="radio"]:nth-of-type(4):checked ~ .tabs .tab:nth-of-type(4) label,
204-
.tabbed [type="radio"]:nth-of-type(5):checked ~ .tabs .tab:nth-of-type(5) label {
205-
border-bottom-color: var(--smoky-white);
206-
background: var(--smoky-white);
207-
color: var(--text-color-dark);
208-
}
168+
.why-feature-icon {
169+
width: 52px;
170+
height: 52px;
171+
border-radius: 12px;
172+
border: 1px solid var(--divider-dark);
173+
background: #eef7f7;
174+
display: flex;
175+
align-items: center;
176+
justify-content: center;
177+
color: #2ea9af;
178+
font-size: 22px;
179+
align-self: start;
180+
}
209181

210-
.tabbed [type="radio"]:nth-of-type(1):checked ~ .tab-content:nth-of-type(1),
211-
.tabbed [type="radio"]:nth-of-type(2):checked ~ .tab-content:nth-of-type(2),
212-
.tabbed [type="radio"]:nth-of-type(3):checked ~ .tab-content:nth-of-type(3),
213-
.tabbed [type="radio"]:nth-of-type(4):checked ~ .tab-content:nth-of-type(4) {
214-
display: block;
182+
.why-feature-key {
183+
margin: 0 0 6px;
184+
font-size: 12px;
185+
font-weight: 700;
186+
letter-spacing: 0.08em;
187+
text-transform: uppercase;
188+
color: var(--text-color-secondary);
189+
}
190+
191+
h3 {
192+
margin: 0;
193+
font-size: clamp(28px, 5vw, 42px);
194+
line-height: 0.96;
195+
letter-spacing: -0.03em;
196+
color: var(--text-color);
197+
}
198+
199+
.why-feature-text > p:last-child {
200+
margin: 10px 0 0;
201+
max-width: 64ch;
202+
color: var(--text-color-secondary);
203+
}
215204
}
216205

217-
.why-list {
218-
color: var(--text-color);
219-
font-size: 16px;
206+
.why-inline-code {
207+
margin: 12px 0 0;
208+
max-width: 560px;
209+
border: 1px solid #cde4e5;
210+
border-left: 4px solid #2ea9af;
211+
border-radius: 8px;
212+
background: #f7fbfc;
213+
214+
code {
215+
white-space: pre;
216+
display: block;
217+
padding: 10px 12px;
218+
}
220219
}
221220

222221
.ais-Highlight {
@@ -503,6 +502,21 @@
503502
width: 100%;
504503
}
505504

505+
.why-feature {
506+
grid-template-columns: 1fr;
507+
gap: 8px;
508+
}
509+
510+
.why-feature .why-feature-icon {
511+
width: 44px;
512+
height: 44px;
513+
font-size: 18px;
514+
}
515+
516+
.why-feature-stack {
517+
gap: 10px;
518+
}
519+
506520
.doc-header-container {
507521
flex-direction: column;
508522
gap: 14px;

assets/images/news/run-btn.webp

2.59 KB
Loading
243 KB
Loading
900 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)