first commit
This commit is contained in:
commit
5c1f124d65
|
@ -0,0 +1,211 @@
|
||||||
|
# Minerace
|
||||||
|
|
||||||
|
Minerace is a racing game for Minecraft. It is made as a datapack,
|
||||||
|
and is thus playable in vanilla Minecraft.
|
||||||
|
|
||||||
|
The datapack is currently made for 1.16.5, use in other versions is
|
||||||
|
at your own risk.
|
||||||
|
|
||||||
|
**Be warned, the datapack is still in early development and may
|
||||||
|
break and change in any way.**
|
||||||
|
|
||||||
|
There is an official server at `185.224.129.232`.
|
||||||
|
|
||||||
|
## How to play
|
||||||
|
|
||||||
|
To play the game, enter the queue and start the race. This may vary
|
||||||
|
depending on your world. If you don't have a world, see the
|
||||||
|
installation section below.
|
||||||
|
Up to eight players can play together in a race.
|
||||||
|
|
||||||
|
Item slot 1 makes your kart accelerate. The kart will rotate towards
|
||||||
|
the direction you are facing, but it's not immediate.
|
||||||
|
When you need to brake, select item slot 2.
|
||||||
|
You are recommended to start braking a few blocks before the road
|
||||||
|
turns, so that you have enough time to rotate your kart.
|
||||||
|
|
||||||
|
|
||||||
|
### Items
|
||||||
|
|
||||||
|
The game has items that are obtained from item boxes. Current items
|
||||||
|
are:
|
||||||
|
- gold: increases speed slightly on use.
|
||||||
|
- slime: a slime can be placed. Slimes stun things that hit them.
|
||||||
|
- turtle: bounces on walls and dies after a timeout, a certain amount
|
||||||
|
of bounces or a stun, whichever happens first.
|
||||||
|
- star: increases speed and grants invulnerability. The user's kart
|
||||||
|
will explode and stun anything it hits. Hit karts lose their items.
|
||||||
|
- missile: lets players shoot a missile in the direction the user is
|
||||||
|
facing.
|
||||||
|
- lightning: all karts ahead of the user will be stunned and lose
|
||||||
|
their items.
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
If you don't already have a world (no world is provided yet),
|
||||||
|
create a new one, preferably empty, as the superflat preset
|
||||||
|
"The Void" does. Set game rules so that no mobs spawn and no damage
|
||||||
|
is dealt to players. The default gamemode should be adventure mode.
|
||||||
|
|
||||||
|
To use the datapack, clone this repository into the desired world's
|
||||||
|
`datapacks` folder. You are suggested to not use the vanilla datapack
|
||||||
|
as it has annoying advancements. The rest of the features from the
|
||||||
|
vanilla datapack are provided by this datapack, so it can be used
|
||||||
|
alone out of the box. Note that some expectations are made by the
|
||||||
|
datapack, such as a barrel or other container at position 1000 0 0
|
||||||
|
and in future versions a pillar blocks at 1000 0 where no two
|
||||||
|
adjacing blocks are the same. Chunk 62 0 is expected to be force
|
||||||
|
loaded.
|
||||||
|
|
||||||
|
A lobby is expected to be at 0 50 0, with a way to start the race
|
||||||
|
using `/function emk:race/launch` (for example with a sign). There
|
||||||
|
is a queue area as defined in `data/emk/functions/tick.mcfunction`,
|
||||||
|
which should be modified to your needs. You may remove the queue
|
||||||
|
area and replace it with your own management. Players are
|
||||||
|
automatically removed from the queue when launching. Up to 8 players
|
||||||
|
in the queue will be launched to a race, so make sure to get a way
|
||||||
|
to enter and leave the queue.
|
||||||
|
|
||||||
|
Map locations are defined in
|
||||||
|
`data/emk/functions/race/launch.mcfunction` and should be modified
|
||||||
|
to your world's needs. You will also need to edit
|
||||||
|
`data/emk/loot_tables/map.json` to adjust the maximum map ID.
|
||||||
|
More information about maps is found further in this file.
|
||||||
|
|
||||||
|
When ready, run `/function emk:setup` to (hopefully) complete the
|
||||||
|
install. This sets up scores and the queue bossbar used by the game.
|
||||||
|
|
||||||
|
|
||||||
|
## Building maps
|
||||||
|
|
||||||
|
You are recommended to read through this entire section before
|
||||||
|
building your map. When using your own world, this is usually a good
|
||||||
|
idea, this game is no fun without maps!
|
||||||
|
|
||||||
|
|
||||||
|
### The start
|
||||||
|
|
||||||
|
When starting a race, all karts are facing south and are expected to
|
||||||
|
pass the finish line once to start the first lap.
|
||||||
|
|
||||||
|
Below is a depiction of how the map's start is suggested to be like,
|
||||||
|
with the first line being the southmost position.
|
||||||
|
`#` indicates the finish line where the start checkpoint should be.
|
||||||
|
`*` is the starting position for a kart, facing the finish line.
|
||||||
|
`_` is a road block, which does not have the tag `emk:offroad`. Edit
|
||||||
|
`data/emk/tags/block/offroad.json` if the standard setup does not
|
||||||
|
suit you.
|
||||||
|
`!` is the starting position, the coordinates of this position will
|
||||||
|
be used later.
|
||||||
|
|
||||||
|
```
|
||||||
|
#######
|
||||||
|
_______
|
||||||
|
_*_!___
|
||||||
|
___*___
|
||||||
|
_____*_
|
||||||
|
_*_____
|
||||||
|
___*___
|
||||||
|
_____*_
|
||||||
|
_*_____
|
||||||
|
___*___
|
||||||
|
_______
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Building guidelines
|
||||||
|
|
||||||
|
Roads are suggested to be at the very minimum 7 blocks wide.
|
||||||
|
9-11 blocks width may be challenging, wider makes the map really easy
|
||||||
|
to get through. One may choose to leave a padding of offroad blocks
|
||||||
|
before the player hits walls, but not doing this is fine too.
|
||||||
|
|
||||||
|
Karts can drive through two blocks tall spaces, although this makes
|
||||||
|
it hard to see, especially for players using taller karts, so a
|
||||||
|
suggested minimum is three blocks.
|
||||||
|
|
||||||
|
Remember that karts can climb terrain - the road does not need to be
|
||||||
|
flat. Handling of half blocks like slabs will be implemented in
|
||||||
|
future versions.
|
||||||
|
|
||||||
|
To make the map more interesting, item boxes can be spawned. To do
|
||||||
|
so, use `/function emk:box/summon`. Misplaced boxes can be removed
|
||||||
|
with `/kill @e[tag=emk-box,sort=nearest,limit=1]` *combined* with
|
||||||
|
`/kill @e[type=minecraft:end_crystal,sort=nearest,limit=1]`
|
||||||
|
(advanced users may adjust the commands to their needs).
|
||||||
|
**Do not punch the end crystals - they will explode!** (unless you
|
||||||
|
are in adventure mode.)
|
||||||
|
|
||||||
|
#### Checkpoints
|
||||||
|
|
||||||
|
Maps use checkpoints of wool blocks located at y level 0. Karts need
|
||||||
|
to pass all checkpoints to complete one lap. The order of the
|
||||||
|
checkpoints is the same as in the creative inventory, starting at
|
||||||
|
white (the finish line) and last one being black.
|
||||||
|
Checkpoints are easier to add when there's a finished track.
|
||||||
|
|
||||||
|
Building checkpoints should be pretty straightforward. Keep in mind
|
||||||
|
that there should always be a way to drive above checkpoints, so
|
||||||
|
walling the entire track is recommended - otherwise confusion may
|
||||||
|
arise.
|
||||||
|
|
||||||
|
Due to checkpoints, a map floor is suggested, but not having one is
|
||||||
|
fine too.
|
||||||
|
|
||||||
|
|
||||||
|
### Map testing
|
||||||
|
|
||||||
|
Karts can be summoned with `/function emk:kart/summon`. To destroy a
|
||||||
|
kart, either drive it off into the void or run
|
||||||
|
`/kill @e[tag=emk-kart,sort=nearest,limit=1]`. The remaining entity
|
||||||
|
may now be safely killed too. Spawning more than one kart per player
|
||||||
|
has unexpected effects.
|
||||||
|
|
||||||
|
|
||||||
|
### Finishing the map
|
||||||
|
|
||||||
|
Run the command `/function emk:race/summon` to summon a map entity.
|
||||||
|
All entities belonging to the race are expected to stay within 500
|
||||||
|
blocks of the map entity. Keep maps far enough away from each other
|
||||||
|
so that there is no overlap of the map entities' radii.
|
||||||
|
Preferably, run the command at the position marked with an `!`.
|
||||||
|
|
||||||
|
Set the map's name with the following command:
|
||||||
|
```
|
||||||
|
/data merge entity @e[tag=emk-map,distance=..500,limit=1] {CustomName:'{"text":"My new map"}'}
|
||||||
|
```
|
||||||
|
|
||||||
|
Set the map's amount of laps with
|
||||||
|
```
|
||||||
|
/scoreboard players set @e[tag=emk-map,distance=..500] emk-lap N
|
||||||
|
```
|
||||||
|
where you replace `N` with the desired amount of laps.
|
||||||
|
|
||||||
|
### Adding maps to the pool
|
||||||
|
|
||||||
|
When the map is ready, add it to
|
||||||
|
`data/emk/functions/race/launch.mcfunction` and adjust
|
||||||
|
`data/emk/loot_tables/map.json` accordingly so that all maps will be
|
||||||
|
available.
|
||||||
|
|
||||||
|
For example, for a world with two maps, `launch.mcfunction` would
|
||||||
|
look something like this:
|
||||||
|
```
|
||||||
|
execute store result score #tmp emk-id run loot insert 1000 0 0 loot emk:map
|
||||||
|
execute if score #tmp emk-id matches 1 positioned 5000 50 0 run function emk:race/start
|
||||||
|
execute if score #tmp emk-id matches 2 positioned 10000 50 0 run function emk:race/start
|
||||||
|
```
|
||||||
|
|
||||||
|
The first line sets a random number as defined in `map.json`.
|
||||||
|
The second and third lines define two maps, one at `5000 50 0` and
|
||||||
|
another at `10000 50 0`.
|
||||||
|
|
||||||
|
To match the maximum map ID of 2, `map.json` should contain
|
||||||
|
```json
|
||||||
|
{"type":"minecraft:chest","pools":[{"rolls":1,"entries":[{"type":"minecraft:item","name":"minecraft:stone_pickaxe","functions":[{"function":"minecraft:set_count","count":{"min":1,"max":2,"type":"minecraft:uniform"}}]}]}]}
|
||||||
|
```
|
||||||
|
|
||||||
|
## The shop
|
||||||
|
|
||||||
|
The shop is not yet documented.
|
Loading…
Reference in New Issue