nqtr-time

Exact captured content · path skills/time/SKILL.md · sha256 c5d63700e93e3b14… · revision 4b90054711c6a86f7f2a9eb2ae90428137bc20c1

Download the exact captured file

---
name: nqtr-time
description: Use when configuring or using the NQTR time system — timeTracker.initialize (dayStartTime, dayEndTime, timeSlots, weekLength, weekendStartDay, getDayName), currentTime/currentDate, increaseTime/increaseDate, nowIsBetween, isWeekend, currentTimeSlot, and the ink commands "# set time", "# set date", "# wait".
---

# NQTR time system

Official docs: [pixi-vn.com/nqtr/time](https://pixi-vn.com/nqtr/time). Index: [nqtr](../getting-started/SKILL.md). Use ink for story-side time changes when available: [nqtr-ink](../ink/SKILL.md).

`date` and `time` are deliberately generic numbers: `time` is the time of day and resets each time `date` increments. Time can mean hours, minutes or an era. Use `timeTracker` (import from `@drincs/nqtr`).

## Initialize (TypeScript, once at startup)

```ts title="main.ts"
import { timeTracker } from "@drincs/nqtr";

timeTracker.initialize({
    defaultTimeSpent: 1,   // default for `# wait`
    dayStartTime: 0,
    dayEndTime: 24,
    timeSlots: [
        { name: "Morning", startTime: 5 },
        { name: "Afternoon", startTime: 12 },
        { name: "Evening", startTime: 18 },
        { name: "Night", startTime: 22 },
    ],
    weekLength: 7,
    weekendStartDay: 6,    // default weekLength - 1
    getDayName: (weekDayNumber) => ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"][weekDayNumber],
});
```

Defaults: `dayStartTime 0`, `dayEndTime 24`, `defaultTimeSpent 1`, `timeSlots []`, `weekLength 7`.

## Get / set

```ts
timeTracker.currentTime;      // number
timeTracker.currentDate;      // number
timeTracker.currentTime = 12;
timeTracker.currentDate = 5;
```

```ink
# set time 12
# set time 18.30
# set time 18:30   // ':' is converted to '.' internally
# set date 5
```

## Increment

`increaseTime(delta?)` adds time; past `dayEndTime` it increments the date and restarts from `dayStartTime` plus the overflow. `increaseDate(delta?, time?)` adds days and optionally sets the time.

```ts
timeTracker.increaseTime(2);
timeTracker.increaseDate(1, 8); // +1 day, time 8
```

```ink
# wait                      // + defaultTimeSpent
# wait 2                    // + 2 time units
# wait days 1               // + 1 day, time = dayStartTime
# wait days 1 hours 2       // + 1 day and + 2 time
```

## Queries

| API | Meaning |
| --- | --- |
| `timeTracker.isWeekend` | current day is in the weekend |
| `timeTracker.currentWeekDayNumber` | 0-based weekday index |
| `timeTracker.currentDayName` | via `getDayName` |
| `timeTracker.currentTimeSlot` | index in `timeSlots` of the current slot |
| `timeTracker.nowIsBetween(from, to)` | current time in `[from, to)`; wraps over midnight when `from > to` |

## Time-dependent images

Do not branch manually everywhere: build a small class (`TimeSlotsImage`) holding one image per slot and returning the right one from `timeTracker.currentTimeSlot` in a `src` getter, then use it for room backgrounds/sprites.

## Pitfalls

- Activities/commitments scheduling (`timeSlot: { from, to }`) uses the same time scale: keep `dayEndTime` consistent with the slots you write. A slot with `from > to` (e.g. `{ from: 20, to: 10 }`) wraps over midnight.
- Time changes are not automatic: the story/UI must call `# wait` / `increaseTime` when the player spends time.