-
Notifications
You must be signed in to change notification settings - Fork 0
/
battle.ts
85 lines (63 loc) · 2.43 KB
/
battle.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
function runBattle(player: Character, tm: tiles.TileMapData) {
tiles.loadMap(tiles.createMap(tm));
for (const sprite of sprites.allOfKind(SpriteKind.Enemy)) {
getCharacterData(sprite).destroy();
}
statusbars.getStatusBarAttachedTo(StatusBarKind.Health, player.sprite).value = 9999;
const enemyTiles = [
assets.tile`bad guy 1`,
assets.tile`bad guy 2`,
assets.tile`bad guy 3`,
assets.tile`bad guy 4`,
assets.tile`bad guy 5`,
assets.tile`bad guy 6`,
]
tiles.placeOnRandomTile(player.sprite, assets.tile`player start`);
const enemies: Character[] = [];
let enemySpawns: tiles.Location[] = [];
for (const tile of enemyTiles) {
enemySpawns = enemySpawns.concat(tiles.getTilesByType(tile));
tiles.coverAllTiles(tile, assets.tile`myTile1`)
}
tiles.coverAllTiles(assets.tile`player start`, assets.tile`myTile1`)
for (const tile of enemySpawns) {
enemies.push(createEnemyAtLocation(tile));
}
scene.centerCameraAt(88, 68);
player.heading = 270;
const renderer = new ScriptRenderer(player);
let battleComplete = false;
registerRendererControls(renderer, startScript);
function startScript() {
let cancellationToken = () => battleComplete;
control.runInParallel(() => {
player.execute(cancellationToken);
});
for (const enemy of enemies) {
control.runInParallel(() => {
enemy.execute(cancellationToken);
});
}
}
pauseUntil(() => sprites.allOfKind(SpriteKind.Enemy).length === 0);
battleComplete = true;
renderer.destroy();
let rewardsSelected = false;
const currrentBlocks = player.script.bag.concat(player.script.current);
const rewards = new RewardScreen([
getRandomBlock(currrentBlocks),
getRandomBlock(currrentBlocks),
Math.percentChance(50) ? getRandomBlock(currrentBlocks) : getArtifact(availableRewards[Math.randomRange(0, availableRewards.length - 1)])
]);
registerRendererControls(rewards, () => rewardsSelected = true);
pauseUntil(() => rewardsSelected)
const reward = rewards.rewards[rewards.currIndex];
if ((reward as any).duration) {
player.script.held = (reward as any as Block);
}
else {
const modifier = (reward as any as Artifact).modifier;
player.setModifier(modifier, true);
}
rewards.destroy();
}