Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
- Added Framerate limit setting
- Fixed an issue when changing slab ownership to properly update walls
- Change ownership of spellbooks when placing slab ownership (Ownership tab)
- Add custom object code improved to better recognize IDs that you've removed
- Custom objects now stored inside of custom_objects.cfg instead of settings.cfg
  • Loading branch information
rainlizard committed Jan 25, 2022
1 parent 3cfae49 commit 330704b
Show file tree
Hide file tree
Showing 20 changed files with 265 additions and 163 deletions.
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@
settings.cfg
unearthcustomslabs.cfg

unearthdata/tmapa0*
custom_slabs.cfg

custom_objects.cfg

unearthdata/tmapa0*
textures

### Godot ###
.import/
Expand Down
9 changes: 4 additions & 5 deletions AutoLoad/Settings.gd
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ var config = ConfigFile.new()

var listOfSettings = [
"REMEMBER_TMAPA_PATHS",
"custom_objects",
"executable_path",
"save_path",
"file_viewer_window_size",
"file_viewer_window_position",
"vsync",
"framerate_limit",
"always_decompress",
"msaa",
"dk_commands",
Expand Down Expand Up @@ -145,10 +145,6 @@ func game_setting(doWhat,string,value):
var oTextureCache = $'../Main/TextureCache'
if doWhat == SET: oTextureCache.LOAD_TMAPA_PATHS_FROM_SETTINGS(value)
if doWhat == GET: return oTextureCache.REMEMBER_TMAPA_PATHS
"custom_objects":
var oCustomData = $'../Main/CustomData'
if doWhat == SET: oCustomData.load_custom_objects(value)
if doWhat == GET: return oCustomData.CUSTOM_OBJECTS
"executable_path":
var oGame = $'../Main/Game'
if doWhat == SET: oGame.set_paths(value)
Expand All @@ -168,6 +164,9 @@ func game_setting(doWhat,string,value):
"vsync":
if doWhat == SET: OS.vsync_enabled = value
if doWhat == GET: return OS.vsync_enabled
"framerate_limit":
if doWhat == SET: Engine.target_fps = value
if doWhat == GET: return Engine.target_fps
"always_decompress":
var oOpenMap = $'../Main/OpenMap'
if doWhat == SET: oOpenMap.ALWAYS_DECOMPRESS = value
Expand Down
59 changes: 40 additions & 19 deletions AutoLoad/Things.gd
Original file line number Diff line number Diff line change
Expand Up @@ -235,25 +235,46 @@ var DATA_OBJECT = {
136 : ["Gold Bag (100)", preload("res://dk_images/valuables/gold_sack_tp/r1frame01.png"), null, TAB_GOLD],
}

enum {
SPELLBOOK_HAND = 11
SPELLBOOK_SLAP = 14
SPELLBOOK_POSSESS = 135
SPELLBOOK_IMP = 12
SPELLBOOK_SIGHT = 15
SPELLBOOK_SPEED = 21
SPELLBOOK_OBEY = 13
SPELLBOOK_CALL_TO_ARMS = 16
SPELLBOOK_CONCEAL = 23
SPELLBOOK_HOLD_AUDIENCE = 19
SPELLBOOK_CAVE_IN = 17
SPELLBOOK_HEAL_CREATURE = 18
SPELLBOOK_LIGHTNING = 20
SPELLBOOK_PROTECT = 22
SPELLBOOK_CHICKEN = 46
SPELLBOOK_DISEASE = 45
SPELLBOOK_ARMAGEDDON = 134
SPELLBOOK_DESTROY_WALLS = 47
var LIST_OF_SPELLBOOKS = [
SPELLBOOK.HAND,
SPELLBOOK.SLAP,
SPELLBOOK.POSSESS,
SPELLBOOK.IMP,
SPELLBOOK.SIGHT,
SPELLBOOK.SPEED,
SPELLBOOK.OBEY,
SPELLBOOK.CALL_TO_ARMS,
SPELLBOOK.CONCEAL,
SPELLBOOK.HOLD_AUDIENCE,
SPELLBOOK.CAVE_IN,
SPELLBOOK.HEAL_CREATURE,
SPELLBOOK.LIGHTNING,
SPELLBOOK.PROTECT,
SPELLBOOK.CHICKEN,
SPELLBOOK.DISEASE,
SPELLBOOK.ARMAGEDDON,
SPELLBOOK.DESTROY_WALLS,
]

enum SPELLBOOK {
HAND = 11
SLAP = 14
POSSESS = 135
IMP = 12
SIGHT = 15
SPEED = 21
OBEY = 13
CALL_TO_ARMS = 16
CONCEAL = 23
HOLD_AUDIENCE = 19
CAVE_IN = 17
HEAL_CREATURE = 18
LIGHTNING = 20
PROTECT = 22
CHICKEN = 46
DISEASE = 45
ARMAGEDDON = 134
DESTROY_WALLS = 47
}

#
Expand Down
81 changes: 48 additions & 33 deletions Scenes/AddCustomObjectWindow.gd
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ onready var oNewObjectType = Nodelist.list["oNewObjectType"]
onready var oMessage = Nodelist.list["oMessage"]
onready var oSelector = Nodelist.list["oSelector"]
onready var oThingTabs = Nodelist.list["oThingTabs"]
onready var oCustomData = Nodelist.list["oCustomData"]
onready var oCustomObjectSystem = Nodelist.list["oCustomObjectSystem"]
onready var oWarningIdInUse = Nodelist.list["oWarningIdInUse"]

var tab = Things.TAB_CREATURE
Expand All @@ -24,10 +24,7 @@ func _process(delta):
if visible == false: return

var value = int(oNewObjectSubtypeID.text)
if value <= thing_list_size(get_thingType()):
oWarningIdInUse.visible = true
else:
oWarningIdInUse.visible = false
oWarningIdInUse.visible = thinglist_has_subtype(get_thingType(), value)

func _on_AddCustomObjectButton_pressed():
var givenName = oNewObjectName.text
Expand All @@ -41,18 +38,14 @@ func _on_AddCustomObjectButton_pressed():

var tabToPlaceIn = oNewObjectTab.get_item_metadata(oNewObjectTab.selected)

var array = [
oCustomObjectSystem.add_object([
get_thingType(), # thingType
int(oNewObjectSubtypeID.text), # subtype
givenName, # Name
null, # Image
null, # Portrait
"", # Image
"", # Portrait
tabToPlaceIn,
]

var subtype = int(oNewObjectSubtypeID.text)

var thingType = get_thingType()

oCustomData.add_object(thingType, subtype, array)
])

# Close window
visible = false
Expand All @@ -75,6 +68,21 @@ func _on_NewObjectSubtypeID_focus_exited():
oNewObjectSubtypeID.text = str(value)



func _on_NewObjectType_item_selected(index):
auto_fill_subtype_field()


func _on_AddCustomObjectWindow_visibility_changed():
if visible == true:
auto_fill_subtype_field()

func auto_fill_subtype_field():
var theNextEmptySubtypeID = get_empty_entry_thinglist(get_thingType())
oNewObjectSubtypeID.text = str(theNextEmptySubtypeID)



func get_thingType():
match oNewObjectType.selected:
0: return Things.TYPE.OBJECT
Expand All @@ -83,22 +91,29 @@ func get_thingType():
3: return Things.TYPE.TRAP
4: return Things.TYPE.DOOR

func thing_list_size(type):
match type:
Things.TYPE.OBJECT: return Things.DATA_OBJECT.size()
Things.TYPE.CREATURE: return Things.DATA_CREATURE.size()
Things.TYPE.EFFECT: return Things.DATA_EFFECT.size()
Things.TYPE.TRAP: return Things.DATA_TRAP.size()
Things.TYPE.DOOR: return Things.DATA_DOOR.size()
Things.TYPE.EXTRA: return Things.DATA_EXTRA.size()

func _on_NewObjectType_item_selected(index):
autoFillSubtypeField()

func autoFillSubtypeField():
var theNextEmptySubtypeID = thing_list_size(get_thingType()) + 1
oNewObjectSubtypeID.text = str(theNextEmptySubtypeID)
func thinglist_has_subtype(thingType, subtype):
if subtype == 0: return true # Don't allow 0 to be recognized as empty

match thingType:
Things.TYPE.OBJECT: return Things.DATA_OBJECT.has(subtype)
Things.TYPE.CREATURE: return Things.DATA_CREATURE.has(subtype)
Things.TYPE.EFFECT: return Things.DATA_EFFECT.has(subtype)
Things.TYPE.TRAP: return Things.DATA_TRAP.has(subtype)
Things.TYPE.DOOR: return Things.DATA_DOOR.has(subtype)
Things.TYPE.EXTRA: return Things.DATA_EXTRA.has(subtype)

func _on_AddCustomObjectWindow_visibility_changed():
if visible == true:
autoFillSubtypeField()
func get_empty_entry_thinglist(thingType):
var db
match thingType:
Things.TYPE.OBJECT: db = Things.DATA_OBJECT
Things.TYPE.CREATURE: db = Things.DATA_CREATURE
Things.TYPE.EFFECT: db = Things.DATA_EFFECT
Things.TYPE.TRAP: db = Things.DATA_TRAP
Things.TYPE.DOOR: db = Things.DATA_DOOR
Things.TYPE.EXTRA: db = Things.DATA_EXTRA

var i = 1 # These arrays don't start at 0
while true:
if db.has(i) == false:
return i
i += 1
15 changes: 10 additions & 5 deletions Scenes/Camera2D.gd
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ func reset_camera():
desired_zoom = zoom

func _process(delta):
if OS.is_window_focused() == false: return
if current == false: return #View is 3D

if zoom != desired_zoom:
Expand All @@ -40,20 +41,15 @@ func _process(delta):

desired_offset += panDirectionMouse * DIRECTIONAL_PAN_SPEED * (zoom/Settings.UI_SCALE.x) * delta
desired_offset += panDirectionKeyboard * DIRECTIONAL_PAN_SPEED * (zoom/Settings.UI_SCALE.x) * delta

var fieldSize = Vector2(32*255,32*255)

var halfViewSize = ((get_viewport().size/Settings.UI_SCALE) * 0.5) * desired_zoom

# The point of this is just so you can't move the map COMPLETELY off the screen
var allowLittleExtraVisible = halfViewSize * 0.10

desired_offset.x = clamp(desired_offset.x, -(halfViewSize.x-allowLittleExtraVisible.x), fieldSize.x+(halfViewSize.x-allowLittleExtraVisible.x))
desired_offset.y = clamp(desired_offset.y, -(halfViewSize.y-allowLittleExtraVisible.y), fieldSize.y+(halfViewSize.y-allowLittleExtraVisible.y))

offset = lerp(offset, desired_offset, clamp(SMOOTHING_RATE * delta, 0.0, 1.0))


if OS.is_window_focused() == true:
if MOUSE_EDGE_PANNING == true and oUi.mouseOnUi == false and mouseIsMoving == true and middleMousePanning == false:
mouse_edge_pan()
Expand All @@ -66,6 +62,15 @@ func _process(delta):
keyboard_pan()
else:
panDirectionKeyboard = Vector2(0,0)

# Close enough
if (offset-desired_offset).abs() < Vector2(0.0001,0.0001):
offset = desired_offset
if (zoom-desired_zoom).abs() < Vector2(0.0001,0.0001):
zoom = desired_zoom

# print('offset : ' + str((offset-desired_offset).abs()))
# print('zoom : ' + str((zoom-desired_zoom).abs()))

func _unhandled_input(event):
if oSettingsWindow.visible == true: return
Expand Down
71 changes: 71 additions & 0 deletions Scenes/CustomObjectSystem.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
extends Node
onready var oPickThingWindow = Nodelist.list["oPickThingWindow"]

var objectsFile = ConfigFile.new()

func _init():
load_file()

func add_object(array):
print("Objected added: " + str(array))
var section = 'OBJECT:' + str(array[0]) + ':' + str(array[1])
objectsFile.set_value(section,"NAME", array[2])
objectsFile.set_value(section,"IMAGE", array[3])
objectsFile.set_value(section,"PORTRAIT", array[4])
objectsFile.set_value(section,"TAB", array[5])

objectsFile.save(Settings.unearthdata.plus_file("custom_objects.cfg"))
load_file()
oPickThingWindow.initialize_thing_grid_items()

func load_file():
objectsFile.load(Settings.unearthdata.plus_file("custom_objects.cfg"))

for sectionName in objectsFile.get_sections():
var sectionNameArray = sectionName.split(":")
var objThingType = int(sectionNameArray[1])
var objSubtype = int(sectionNameArray[2])

var objName = objectsFile.get_value(sectionName, "NAME", "")
var objImage = objectsFile.get_value(sectionName, "IMAGE", "")
var objPortrait = objectsFile.get_value(sectionName, "PORTRAIT", "")
var objTab = objectsFile.get_value(sectionName, "TAB", 0)
if objImage == "": objImage = null # This is to prevent an annoying line in the Debugger
if objPortrait == "": objPortrait = null

var constructArray = [
objName,
objImage,
objPortrait,
objTab,
]
match objThingType:
Things.TYPE.OBJECT: Things.DATA_OBJECT[objSubtype] = constructArray
Things.TYPE.CREATURE: Things.DATA_CREATURE[objSubtype] = constructArray
Things.TYPE.EFFECT: Things.DATA_EFFECT[objSubtype] = constructArray
Things.TYPE.TRAP: Things.DATA_TRAP[objSubtype] = constructArray
Things.TYPE.DOOR: Things.DATA_DOOR[objSubtype] = constructArray

#print(Things.DATA_OBJECT[objSubtype])

print('Custom objects loaded into memory')

func remove_object(thingType, subtype):
oPickThingWindow.set_selection(null, null)
print('Attempting to remove thingType:' + str(thingType) + ', subtype:'+str(subtype))

var section = 'OBJECT:'+str(thingType)+':'+str(subtype)
if objectsFile.has_section(section):
objectsFile.erase_section(section)
print('Removed custom object type: '+str(thingType) + ' subtype: '+ str(subtype))

match thingType:
Things.TYPE.OBJECT: Things.DATA_OBJECT.erase(subtype)
Things.TYPE.CREATURE: Things.DATA_CREATURE.erase(subtype)
Things.TYPE.EFFECT: Things.DATA_EFFECT.erase(subtype)
Things.TYPE.TRAP: Things.DATA_TRAP.erase(subtype)
Things.TYPE.DOOR: Things.DATA_DOOR.erase(subtype)

objectsFile.save(Settings.unearthdata.plus_file("custom_objects.cfg"))
load_file()
oPickThingWindow.initialize_thing_grid_items()
File renamed without changes.
51 changes: 0 additions & 51 deletions Scenes/CustomStuff.gd

This file was deleted.

Loading

0 comments on commit 330704b

Please sign in to comment.