fixes, bits and pieces, changes in ID referencing, terrain and wall takes damage, working test pickaxe, and a new issue

This commit is contained in:
Song Minjae
2017-04-17 02:18:52 +09:00
parent 8d4b803ef5
commit 4c928f2772
40 changed files with 502 additions and 249 deletions

View File

@@ -50,9 +50,9 @@ abstract class Actor(val renderOrder: RenderOrder) : Comparable<Actor>, Runnable
fun hasCollision(value: Int) =
try {
Terrarum.ingame!!.theGameHasActor(value) ||
value < ItemCodex.ITEM_COUNT_MAX ||
value < ItemCodex.ACTOR_ID_MIN ||
value < when (renderOrder) {
RenderOrder.BEHIND -> ItemCodex.ITEM_COUNT_MAX
RenderOrder.BEHIND -> ItemCodex.ACTOR_ID_MIN
RenderOrder.MIDDLE -> 0x10000000
RenderOrder.MIDTOP -> 0x60000000
RenderOrder.FRONT -> 0x70000000

View File

@@ -138,7 +138,7 @@ open class ActorHumanoid(birth: GameDate, death: GameDate? = null)
override val isUnique: Boolean = false
override var baseMass: Double = 0.0
override var baseToolSize: Double? = null
override var category = "should_not_be_seen"
override var inventoryCategory = "should_not_be_seen"
override val originalName: String = actorValue.getAsString(AVKey.NAME) ?: "(no name)"
override var consumable = false
}

View File

@@ -126,7 +126,9 @@ class ActorInventory(val actor: Pocketed, var maxCapacity: Int, var capacityMode
remove(item, 1)
}
else {
// TODO decrement durability
item.durability -= 1f
if (item.durability <= 0)
remove(item, 1)
}
}

View File

@@ -12,7 +12,7 @@ import org.newdawn.slick.Graphics
class DroppedItem(private val item: InventoryItem) : ActorWithSprite(Actor.RenderOrder.MIDTOP) {
init {
if (item.id >= ItemCodex.ITEM_COUNT_MAX)
if (item.id >= ItemCodex.ACTOR_ID_MIN)
throw RuntimeException("Attempted to create DroppedItem actor of a real actor; the real actor must be dropped instead.")
isVisible = true

View File

@@ -3,6 +3,8 @@ package net.torvald.terrarum.gameactors
import net.torvald.terrarum.gameworld.WorldTime
import org.newdawn.slick.Input
typealias AnyPlayer = HistoricalFigure
/**
* An actor (NPC) which has life and death,
* though death might not exist if it has achieved immortality :)

View File

@@ -1,9 +1,12 @@
package net.torvald.terrarum.gameactors
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.ai.AILuaAPI
import net.torvald.terrarum.gameactors.ai.ActorAI
import net.torvald.terrarum.gameactors.ai.LuaAIWrapper
import net.torvald.terrarum.gamecontroller.mouseX
import net.torvald.terrarum.gamecontroller.mouseY
import net.torvald.terrarum.gameitem.InventoryItem
import org.luaj.vm2.*
import org.luaj.vm2.compiler.LuaC
@@ -51,13 +54,22 @@ open class HumanoidNPC(
set(value) {
actorValue[AVKey.SCALE] = value
}
override var category = "npc"
override var inventoryCategory = "npc"
override val originalName: String = actorValue.getAsString(AVKey.NAME) ?: "NPC"
override var consumable = false
override var consumable = true
override fun secondaryUse(gc: GameContainer, delta: Int): Boolean {
return false
// TODO place this Actor to the world
try {
// place the actor to the world
this@HumanoidNPC.setPosition(gc.mouseX, gc.mouseY)
Terrarum.ingame!!.addNewActor(this@HumanoidNPC)
// successful
return true
}
catch (e: Exception) {
e.printStackTrace()
return false
}
}
}

View File

@@ -15,8 +15,6 @@ import java.security.SecureRandom
*/
object InjectCreatureRaw {
// FIXME strength not injected properly?
const val JSONPATH = "./assets/raw/creatures/"
private const val JSONMULT = "mult" // one appears in JSON files

View File

@@ -58,6 +58,7 @@ object PlayerBuilderSigrid {
p.actorValue[AVKey.INTELLIGENT] = true
p.actorValue[AVKey.LUMINOSITY] = Color(0x434aff).to10bit()
//p.actorValue[AVKey.LUMINOSITY] = 214127943 // bright purple
p.actorValue[AVKey.BASEDEFENCE] = 141
@@ -65,7 +66,7 @@ object PlayerBuilderSigrid {
//p.actorValue["__selectedtile"] = 147 // test code; replace with <tile_item>.primaryUse(gc, delta)
p.actorValue["__aimhelper"] = true // TODO when you'll gonna implement it?
p.setHitboxDimension(15, p.actorValue.getAsInt(AVKey.BASEHEIGHT)!!, 11, 0) // FIXME offsetY of -2: Have no idea about the error; it's just supposed to be zero
p.setHitboxDimension(15, p.actorValue.getAsInt(AVKey.BASEHEIGHT)!!, 11, 0)
p.inventory = ActorInventory(p, 0, ActorInventory.CAPACITY_MODE_NO_ENCUMBER)
@@ -85,6 +86,7 @@ object PlayerBuilderSigrid {
Tile.STONE_QUARRIED, Tile.STONE_TILE_WHITE, Tile.TORCH
)
tiles.forEach { p.inventory.add(it, 999) }
p.inventory.add(ItemCodex.ITEM_STATIC.first)

View File

@@ -3,7 +3,6 @@ package net.torvald.terrarum.gameactors
import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameitem.InventoryItem
import net.torvald.terrarum.itemproperties.ItemCodex
import java.util.*
/**
* Created by minjaesong on 16-01-15.
@@ -17,10 +16,13 @@ interface Pocketed {
*/
fun unequipItem(item: InventoryItem) {
if (item.equipPosition == InventoryItem.EquipPosition.NULL)
throw Error("Unequipping the item that cannot be equipped")
throw Error("Unequipping the item that cannot be equipped in the first place")
if (!inventory.contains(item))
throw Error("Unequipping the item that does not exist in inventory")
if (!inventory.contains(item)) {
//throw Error("Unequipping the item that does not exist in inventory")
System.err.println("[Pocketed] Warning -- Unequipping the item that does not exist in inventory")
return // just do nothing
}
inventory.itemEquipped[item.equipPosition] = null
item.effectOnUnequip(Terrarum.appgc, Terrarum.UPDATE_DELTA)

View File

@@ -239,7 +239,7 @@ internal class AILuaAPI(g: Globals, actor: ActorWithSprite) {
luatable[y - feetTilePos[1]] = LuaTable()
for (x in feetTilePos[0] - radius..feetTilePos[0] + radius) {
val tile = TileCodex[Terrarum.ingame!!.world.getTileFromTerrain(x, y) ?: 4096]
val tile = TileCodex[Terrarum.ingame!!.world.getTileFromTerrain(x, y) ?: Tile.NULL]
val solidity = tile.isSolid.toInt()
val liquidity = tile.isFluid.toInt()
val gravity = tile.isFallable.toInt()