# Crash BASIC 1.39.0 Release Notes

*~written by Crash-tan~*

## THE "PICK ANY COLOR YOU WANT" UPDATE

For your whole life with me, color has meant *a number 0 to 255* — an
index into a 256-slot palette. Want a specific shade? Better hope it's in
the palette, or go redefine a slot first. It's the honest old-school way,
and it's staying exactly as it is by default. But sometimes you just want
to say "draw this in `#FF8800` orange" and be done.

As of 1.39.0, you can:

```basic
SET PALETTE OFF                 ' enter direct-color mode
COLOR &HFFFF8800                ' opaque orange — A=FF, R=FF, G=88, B=00
PSET (10, 10), &H8000FF00       ' 50%-transparent green, no palette needed
SET PALETTE ON                  ' back to palette indices (the default)
```

In direct-color mode a color value **is** the color — a literal
`0xAARRGGBB` (alpha, red, green, blue). Transparency comes from the alpha
byte (`&H00......` = fully transparent). No palette slot, no setup, every
color in the 32-bit space available immediately. Flip back to `SET
PALETTE ON` and you're indexed again. Mix and match per-section however
you like.

---

## Hexadecimal & octal numbers: `&H` and `&O`

To make that orange bearable to type, whole numbers can now be written in
hex and octal, the classic BASIC way:

```basic
x = &HFF        ' hex 255 (also &hff — case doesn't matter)
y = &O17        ' octal 15
c = &HFFFF8800  ' that orange again
```

`&H` for hexadecimal, `&O` for octal. They're plain integers — use them
anywhere a number goes, not just colors. (Heads up: `&H...`/`&O...` now
take precedence over the `&` name-dereference operator. `&HFF` is always
hex 255; to dereference a variable, its name needs a non-hex character —
`&Handler` is still a deref, since "andler" isn't all hex digits.)

---

## The palette grew up (no more 256-color ceiling)

The palette is no longer capped at 256 entries. `PALETTE` accepts any
index you give it and the palette **grows to fit** — index 300, 5000,
whatever you need:

```basic
PALETTE 1000, &HFF112233        ' totally fine now
PSET (50, 50), 1000
```

The old "color index out of range (0–255)" error is gone — it was a
pointless restriction. Indices were always stored as integers; now they
actually behave like it. `-1` still means transparent when you're
drawing, same as ever.

---

## Polish that ships with all this

- **Clean edges on see-through shapes.** A filled box (`LINE … BF`) or a
  solid circle/polygon drawn in a semi-transparent color now has a
  *uniform* edge — no more darker, double-blended border where the
  outline used to get painted twice over the fill. (You'd never have
  noticed with opaque palette colors; with alpha it was obvious.)
- **A friendlier `CIRCLE` typo.** Fat-finger a color value into the
  radius slot — `CIRCLE (60,60), &HBBFFFFFF` — and instead of the
  renderer falling over, you get a clear "radius out of range" message
  pointing you at the argument order. Much nicer than a hang.

---

## Compatibility notes

- **Nothing breaks. Palette mode is still the default.** Every existing
  program behaves identically — `SET PALETTE` is opt-in, color indices
  still work, and the default VGA palette is unchanged.
- **`&H` / `&O` are new syntax**, not changes to anything that existed —
  except the one `&`-precedence note above (a deref of a hex-looking name
  like `&HFF` now reads as hex; vanishingly rare in practice).
- **Direct vs. palette is a per-section choice.** Toggle `SET PALETTE
  OFF`/`ON` as often as you like; it only affects how color values are
  interpreted from that point on.

---

*256 colors walked so 16 million could run.*

*— Crash-tan*
