Even in last version there were sometimes problems with shadows:

Now it’s fixed (probably). I also added dawn and dusk, so the day doesn’t change into night too suddenly.
LiquidHot made a better background for inventory.


Basic inventory is in nightly version, but cuboid, rails and creative mode are missing, so it’s better to stay with the last version.
Download test! Here: inventory1Binary, source
–
*Background is a fullscreen .png.
*Each item is a different .png. How to package them into one file? Zip? Compress all data files in game into one zip? SharpZipLib?
*In previous post blocks were bigger (2×2 cells) – this could vary for different blocks.
Manical.Digerer made a contest for the default texture pack. Of course the winning texture (by Andy) will be added.
In game:
This looks like Minecraft. Next contest should be about creating a completely new set of blocks (new layout in terrain.png), with blocks.csv file. But maybe it’s possible to vote on single blocks, instead of on whole set?
There is a good JavaScript interpreter: http://jint.codeplex.com/.
-It’s written in pure C# (no wrappers)
-Uses a mature language compared to custom made (passes Javascript standard tests).
-Perfectly sandboxed – script can only call functions provided to it, not random .NET classes.
-It’s possible to set script timeout with granularity of less than 0.1 millisecond, and should be easy to add memory limit.
-It interprets line-by-line so there is a great control over execution.
The only problem is that it’s extremely slow: just 30 000-300 000 loop iterations per second, so it can be only used for high level tasks, not for block manipulation or monster rendering. Monster code (.mdc) is 10x faster – it draws 100 models (when using 100% cpu. 50% time was spent on opengl calls, 50% on parsing), while a version ported to javascript drawed only 10 models.
(This doesn’t work yet)
Login to server as a world builder.
Place script-block in house, click on it to open text editor, and paste this code:
/* Script-block in house */ function Tick() { NpcSpawn("Npc1", "human", "Npc1.png", Npc1OnDialog); } function Npc1OnDialog(player) { if (player["QuestRats"] == "") { Dialog("Hello. I have a rat problem in my basement. Can you get rid of them?", "Yes.", player["QuestRats"] = "Accepted", "No.", ""); } if (player["QuestRats"] == "Accepted") { Dialog("Have you finished clearing the basement from rats?", "No, I'll be back soon.", ""); } if (player["QuestRats"] == "GetReward") { Dialog("Great that you helped! I have a little reward for you.", "Thanks.", ""); player["QuestRats"] = "Done"; ItemGiveBlock(player.Name, "Gold", 1); PlaySound("questcompleted.wav"); } }
Now go to basement, place script-block, and paste this code.
/* Script-block in basement. */ function Tick() { Every(60 * 10); for (i = 0; i < 5; i++) { NpcRespawn("Rat" + i, "Rat"); NpcOnDeath("Rat" + i, OnRatDeath); } } function OnRatDeath() { for (i = 0; i < 5; i++) { if (NpcAlive("Rat" + i)) { return; } } for (var p in PlayersNear()) { p["QuestRats"] = "GetReward"; } }
Script is very complicated. Scripts like these could be
a) copypasted
b) made into generic functions
“function Tick() { Every(60 * 10);” <- It can’t be like this, because it won’t be possible to return from Every(9999999) into less.
RPG (like Diablo II, Dungeon Siege, Morrowind, Neverwinter Nights) in a world of blocks (like Minecraft) made by players from inside of the game (server game masters).
I fixed account verification – no more fake exe or Gronkhs! (Though there will still be ~exe and ~Gronkh guests).