Jump to content

ZT EMU API


Goosifer

Recommended Posts

Just an update on this project:

 

I haven't had time to touch EMU since early November but I'll hopefully push out at least a couple more updates this Winter. Right now there's a potential problem of race conditions. Without getting too wordy: I need to figure out how to make Zoo Tycoon and EMU play nice with each other in case both want to update an in-game value at the same time, such as the budget.

 

After that, the first 'official' release should be ready to publish and I can start exploring more exciting parts of the game to manipulate.

Link to comment
Share on other sites

  • 4 weeks later...

EMU_v1.0.0-alpha.5

 

First off, a big welcome to our team's newest contributor: wowjinxy. She has been a massive help mapping out the game's subroutines.

Core Changes

  • EMU now hooks onto main game loop for main thread synchronization. Currently the Lua script engine runs on the main game loop.

Console Changes

  • When CTRL+J is pressed to call the console window, it attaches itself to the top right corner of the main game window.
    • Limitation: Still not dynamic enough to stay fixed to the corner when game window is moved, resized, etc.
  • Console stays ontop of the main game window
    • Limitation: This only happens in windowed mode, console isn't visible in full screen. It also has the side effect of keeping Z-Order focus over other opened windows if you minimize Zoo Tycoon.
    • If it's obtrusive, close the console with exit.
  • exit command now terminates the console window safely and does not close the game.
  • Console no longer shows in taskbar as another application.

Possible Solutions for Another Day

  • Will try to hook the main window procedure in a future version to handle specific main window events and synchronize console display properties dynamically. (i.e. minimize when game is minimized, stay ontop when game is full screen, etc)
  • Other GUI experiments if this is doing too much.

Next release will finally mark the first major release.

Targets for next release

  • Set console to run on main game thread.
  • Add new API functions for game manipulation.
  • Add help console command with list of all console commands.
  • Write and record tutorials that show how EMU works.
  • Refactor all code for polish.

Credits

Special thanks to wowjinxy for her help finding the game loop used in this update.

To Install

Download here: https://github.com/openztcc/EMU/releases/tag/v1.0.0-alpha.5

 

Drop all of the contents of the binary release zip into the root Zoo Tycoon folder.

Link to comment
Share on other sites

  • 2 weeks later...

EMU v1.0.0 (First official release)

 

Download here: https://github.com/openztcc/EMU/releases/tag/untagged-b4b69f2ea87b4f029d67

 

This marks the first official release of EMU, the Zoo Tycoon scripting API that enables modders to modify the game in ways not possible before.

Bug Fixes/Improvements

  • Console commands run on main game loop now.
  • Fixed exit command not closing command console.
  • Misc command console fixes.
  • Command console is color coded for errors, some messages.

Added global variables to Lua scripts

_globalAnimalRating: Sets the animal rating per loop.
_globalGuestRating: Sets the guest rating per loop.
_globalZooRating: Sets the guest rating per loop.

New console command

  • devmode <true/false>: Set to true to enable dev mode; false to disable. This lets you enable dev mode without messing with ini settings!

Credits

Massive thanks to wowjinxy and Finn for their help figuring out how the game ticks!

Link to comment
Share on other sites

EMU v1.0.1

 

This is just a hot fix release.

Bug fixes

  • Fixes bug where the zoo ratings were not displaying correctly if you only had EMU installed without any script hacks.

I submitted to ZooTek for approval. If you have v1.0.0 downloaded, I recommend this newest version to fix the bug. For more the release page with the file: https://github.com/openztcc/EMU/releases/tag/v1.0.1-release

  • Love 1
Link to comment
Share on other sites

  • 1 month later...
Goosifer

Another feature preview for Emu v1.1.0 that's hard to demonstrate without video.

 

Feature: Hot Reload

Update configuration on any object and see the updates in the game without having to re-zip your files or re-launch your game.

 

In my example below, I have a config file open for the Large Rock. By default it can be placed on water, auto rotate, and is not selectable. With hot reload, I changed all of that configuration without leaving the game and saw the updates live on the right. I also changed the footprintx and footprinty!

Screenshot%202024-03-15%20215752.png

 

I tried recording a video but they all came out awful hahaha. I was nearly tempted to go full Youtuber and do a face reveal but you all shall be satisfied with cartoon me in the pfp.

  • Love 1
Link to comment
Share on other sites

Goosifer

You might have noticed me post a bunch of tutorials about EMU scripting today. I meant to follow it up with an EMU v1.1.0 release but I just need to fix a few things before it's ready, but hopefully later today or tomorrow! I'll have the invisible fences ready by then as well.

Link to comment
Share on other sites

Goosifer

EMU v1.1.0 Released
Features

Scripting has been expanded to entity and entity type operations. This means we can create scripts that edit the current state of scenery currently placed on the map. Currently limited to most scenery and buildings; animals, guests, and staff will be for another update.

For a full overview of all Lua functions available on this update, please see:

  • World Manager API. Provides utility functions to obtain entity and entity types from the world state.
  • UI General API. Provides utility functions to obtain entity and entity types from player actions, namely selecting entities like buildings.
  • Entity API. Functions that let you operate on entities currently on the map.
  • Entity Types API. Functions that let you operate on entity templates. Think of these as parent classes to entities.
  • Game Manager API. Operate on the current zoo state, such as budget, pause, devmode flag, etc.

Considerations

  • Temporarily disabled _setZooRating, _setAnimalRating, _setGuestRating from the Game Manager API while we figure out a way to re-implement them instead. They're a bit problematic to hook because they're essentially a live calculation and setting a value is limited to a persistent loop to keep the value there.
  • Removed unnecessary console commands not useful for the development of the project. For an up-to-date list, check out EMU Console Commands
  • Game Manager API function names have been updated to camel case to stick to a consistent style across the project.

Documentation

Better documentation now available for this project if you'd wish to learn how to script Zoo Tycoon 1 using EMU API. Visit Zooberry Docs:

Discord

We now have a Discord. Join us here: https://discord.gg/KcpedmghWm

 

Download

Will be available on ZooTek soon, but on the meantime is available for download here:
https://github.com/openztcc/EMU/releases/tag/v1.1.0-release

  • Love 2
Link to comment
Share on other sites

Goosifer

Just for posterity, a note about EMU API and anti-virus false-positives:

 

Due to the nature of how the API runs by injecting code into the running game process and dynamic script execution, your anti-virus software may flag the API as a false positive due to this behavior. This is common with modding tools in other games and is generally safe to ignore.

 

This API is and will always be open source. If you have any concerns about the safety of the API, you are welcome to inspect the source code yourself or build the API from source.

 

https://github.com/openztcc/EMU/

 

 

It's possible you might need to add the `res-EMU.dll` to your anti-virus software's exclusion list to prevent it from being flagged as a false positive.

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...
Goosifer

Hi. I wanted to write a quick announcement. The short of it is: I'm retiring EMU from further development. It's not the end of the road for the utility it brought though. Finn and I have been working on OpenZT over the past year and lately it's been full steam ahead. Everything EMU can do it can do but better. If you liked my scripts that worked with EMU, they'll live on in OpenZT.

 

More information in the Summer :) Or join our Discord in my signature link.

  • Like 1
  • Love 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...