]> git.lizzy.rs Git - dragonblocks.git/blob - game/tnt/init.js
Rename PixelManipulator to Schematic
[dragonblocks.git] / game / tnt / init.js
1 tnt = {};
2 tnt.explosion = new dragonblocks.Schematic([
3         ["", "air", "air", "air", ""],
4         ["air", "air", "air", "air", "air"],
5         ["air", "air", "§air", "air", "air"],
6         ["air", "air", "air", "air", "air"],
7         ["", "air", "air", "air", ""],
8 ]);
9 tnt.explosion.addFunction((node, x, y) => {
10         if(node.onblast && node.onblast(x, y) == false)
11                 return false;
12         return dblib.random(0, 100) < 90;
13 });
14 tnt.ignite = function(x, y, time){
15         dragonblocks.setTimer("tntTimer", time, _ => {tnt.explode(x, y)}, dragonblocks.getNode(x, y).meta);
16 }
17 tnt.explode = function(x, y){
18         dragonblocks.setNode(x, y, "air");
19         dragonblocks.playSound("tnt_explode.ogg");
20         tnt.explosion.apply(x, y);
21 }
22 dragonblocks.registerNode({
23         name: "tnt:tnt",
24         groups: ["snappy"],
25         hardness: 3,
26         stable: true,
27         desc: "TNT",
28         texture: "tnt_tnt.png",
29         onfire: (x, y) => {
30                 dragonblocks.playSound("tnt_ignite.ogg");
31                 dragonblocks.setNode(x, y, "tnt:active_tnt");
32         },
33         onblast: (x, y) => {
34                 dragonblocks.playSound("tnt_ignite.ogg");
35                 tnt.ignite(x, y, 0.1);
36         },
37         onclick: (x, y) => {
38                 if(dragonblocks.player.getWieldedItem().item == "torch:torch"){
39                         dragonblocks.playSound("tnt_ignite.ogg");
40                         dragonblocks.setNode(x, y, "tnt:active_tnt");
41                 }
42         },
43         flammable: true
44 });
45 dragonblocks.registerNode({
46         name: "tnt:active_tnt",
47         groups: [],
48         hardness: 1,
49         stable: true,
50         desc: "TNT (active)",
51         texture: "tnt_active_tnt.png",
52         onset: (x, y) => {
53                 tnt.ignite(x, y, 4);
54         },
55         ondig: _ => {
56                 return false;
57         },
58         onblast: _ => {
59                 return false;
60         },
61         hidden: true
62 });
63 dragonblocks.registerNode({
64         name: "tnt:gunpowder",
65         groups: ["snappy"],
66         hardness: 1,
67         stable: true,
68         mobstable: false,
69         desc: "Gunpowder",
70         texture: "tnt_gunpowder.png",
71         onclick: (x, y) => {
72                 if(dragonblocks.player.getWieldedItem().item == "torch:torch_floor")
73                         dragonblocks.setNode(x, y, "tnt:active_gunpowder");
74         },
75         hidden: true,
76 });
77 dragonblocks.registerNode({
78         name: "tnt:active_gunpowder",
79         groups: ["snappy"],
80         hardness: 1,
81         stable: true,
82         mobstable: false,
83         desc: "Gunpowder (active)",
84         texture: "tnt_active_gunpowder.png",
85         drops: "tnt:gunpowder",
86         onset: (x, y) => {
87                 let meta = dragonblocks.getNode(x, y).meta;
88                 meta.gunpowderTime = 1;
89                 meta.gunpowderInterval = setInterval(_ => {
90                         meta.gunpowderTime -= 0.1;
91                         if(meta.gunpowderTime <= 0){
92                                 dragonblocks.setNode(x, y, "air");
93                                 for(let [ix, iy] of [[x - 1, y], [x + 1, y], [x, y - 1], [x, y + 1]]){
94                                         if(dragonblocks.getNode(ix, iy).name == "tnt:gunpowder")
95                                                 dragonblocks.setNode(ix, iy, "tnt:active_gunpowder");
96                                         else if(dragonblocks.getNode(ix, iy).name == "tnt:tnt")
97                                                 tnt.ignite(ix, iy, tnt.time);
98                                 }
99                                 clearInterval(meta.gunpowderInterval);
100                         }
101                 }, 100);
102         },
103         onremove: (x, y) => {
104                 clearInterval(dragonblocks.getNode(x, y).meta.gunpowderInterval);
105         },
106         hidden: true
107 });