Core Update 1.0.249 - New Avatar Editor and MetaMask Integration

Highlights for Version 1.0.249

Welcome to our June 21st Patch Notes!

The new Avatar system is now live

The Avatar system has been completely reworked to allow mixing and matching of individual parts for tremendously more customization. See full details below.

MetaMask Wallet linking

  • Users can now connect MetaMask wallets to their accounts!
  • Players can use owned digital assets as profile pictures and on the new NFTee character cosmetic.
  • Creators can use a new API to get the contents of a user’s wallet and information about collections on OpenSea.
  • Read more about Wallet linking and our plans for NFTs inside of Core in our blog post.
  • What is MetaMask and how do you connect it to Core? Learn more in our help center article.

Make sure to watch the patch notes live-stream hosted by Kalvothe on the Core Live Twitch channel at 12:30 PM PST.

General

  • New: Revamped Avatar System:
    • Players now have much more control over individual hairs, colors, head items, and more!
    • For players that previously purchased characters, you will have all the parts that make up that character - nothing will be lost.
    • All users will go through the new Avatar flow to create their Avatar. Because the system has changed so much under the hood, old presets are discarded and all users will create through the new interface.
    • We can’t wait to see everyone's new style in the Core Metaverse!
  • New: MetaMask wallet linking:
    • Players can now link a MetaMask wallet to their account by logging into coregames.com and going to Settings > Linked Accounts in the user's profile menu in the top right.
    • Once a wallet is linked, image NFTs in it that are on the Ethereum blockchain and on OpenSea can be used as Profile Pictures and NFTee images inside of Core.
    • To set a profile picture, just go to the new NFT tab when editing your picture.
    • All players have the new NFTee character cosmetic. To put an image on it, just select the shirt and click the NFT icon, which will show you all of the images in your linked wallets. You can also edit the horizontal and vertical position, as well as the scale of the image.
    • Lazy minted images can be used with this setup, which means that it is very easy for any user to put an image on OpenSea and use it within Core without paying any gas fees. Just create a Metamask wallet, go to OpenSea, and click the "Create" button.
    • Additionally, creators can now get info about items in users' wallets. See the API section for full details. This will allow games to do all sorts of cool things with NFTs from existing collections, or by minting their own NFTs on OpenSea and creating games based around them!
  • New: Added 1280 x 720 (16:9) resolution to the Device Preview list under "PC".
  • New: In the Terrain editor, holding the Shift key while in Sculpt mode, the brush will now change to the Smooth tool.
    • Also added hotkeys [ ] to change brush size and 0-9 keys to adjust strength.
  • New: Creators now have access to "Bot Spawning" on the profiler to test out the performance of their games with multiple players.
    • This feature is accessible to game owners only.
  • New: Added a "Mesh Merging Memory" counter to the Profiler.
  • New: This release exposes the "Complex Collision" flag in the editor.
    • When turned off this enables simpler, faster capsule collision for players.
    • As an example, games like shooters will likely want to keep Complex Collision on, since exact player collision is important for gameplay. Social experiences and games like Obbys or clickers will want this setting off so they can have increased performance since they will not care about the exact collision on a player.
  • New: In Create mode, the Material Editor window position is now persisted as part of layouts through exit and re-entering.
    • There are now buttons to select another Custom Material to edit, and "Find in Catalog/Open Reference Viewer" for current Custom Material.
    • Material Editor now supports having multiple tabs open at same time, we a added "Open in New Tab" button to select and edit custom materials in another tab. If the asset is already open, it will try to focus on existing tab instead.
  • New: Emotes will now have basic movement SFX when performed in-game or within the avatar editor emote selection screen.
  • New: Added a new "Enable Camera Collision" property in the scene category.
  • Changed: The dropdown for selecting a tool in the "Terrain Sculpting" panel has been replaced with a button for each tool.
  • Fixed: The "Play", "Events", and "My Games & Events" subtabs will no longer wrap the category rows on smaller or more narrow resolutions. They will now shrink the category rows down to fit all entries across.
  • Fixed: An issue where UIContainer's canvases set to a refresh rate of 0 would sometimes fail to render custom brushes correctly.
  • Fixed: An issue where dynamically spawned networked meshes were not able to provide mesh asset information on clients.
  • Fixed: Updated "Wood Plank" material to remove visible seam in texture.
  • Fixed: Updated "Sphere - Half" to remove a duplicate mesh that was causing transparency to display inconsistently.
  • Fixed: An issue where equipping a weapon with an empty animation stance would cause some animations to fail.
  • Fixed: When using the property playbackRateMultiplier on an AnimatedMesh, setting its value to zero will not only stop the animations but will also improve performance.
  • Fixed: Certain composite materials in the catalog were not correctly applying color modifications from scripts.
  • Fixed: A rare crash in CoreString.Trim() when called with delimiters that are longer than the string to be trimmed.

API

Blockchain

  • New: Added the a Blockchain namespace that is a collection of functions for looking up blockchain tokens, collections, and contracts.

Class Functions

Class Function Name Return Type Description Tags
Blockchain.GetToken(string contractAddress, string tokenId) <BlockchainToken, BlockchainTokenResultCode, string error> Looks up a single blockchain token given its contract address and token ID. This function may yield while fetching token data. May return nil if the requested token does not exist, or if an error occurs while fetching data. The status code in the second return value indicates whether the request succeeded or failed, with an optional error message in the third return value. None
Blockchain.GetTokensForPlayer(Player player, [table parameters]) <BlockchainTokenCollection, BlockchainTokenResultCode, string error> Searches for blockchain tokens owned by the specified player. This function may yield while fetching token data. May return nil if an error occurs while fetching data. The status code in the second return value indicates whether the request succeeded or failed, with an optional error message in the third return value.
Optional parameters can be provided to filter the results:
contractAddress (string): Only return tokens with the specified contract address.
tokenIds (string or Array<string>): Only return tokens with the specified token IDs.
None
Blockchain.GetTokensForOwner(string ownerAddress, [table parameters]) <BlockchainTokenCollection, BlockchainTokenResultCode, string error> Searches for blockchain tokens owned by the specified wallet address. This function may yield while fetching token data. May return nil if an error occurs while fetching data. The status code in the second return value indicates whether the request succeeded or failed, with an optional error message in the third return value.
Optional parameters can be provided to filter the results:
contractAddress (string): Only return tokens with the specified contract address.
tokenIds (string or Array<string>): Only return tokens with the specified token IDs.
None
Blockchain.GetTokens(string contractAddress, [table parameters]) <BlockchainTokenCollection, BlockchainTokenResultCode, string error> Searches for blockchain tokens belonging to the specified contract address. This function may yield while fetching token data. May return nil if an error occurs while fetching data. The status code in the second return value indicates whether the request succeeded or failed, with an optional error message in the third return value.
Optional parameters can be provided to filter the results:
tokenIds (string or Array<string>): Only return tokens with the specified token IDs.
None
Blockchain.GetContract(string contractAddress) <BlockchainContract, BlockchainTokenResultCode, string error> Looks up a blockchain contract given the contract address. This function may yield while fetching the contract data. May return nil if the requested contract does not exist, or if an error occurs while fetching data. The status code in the second return value indicates whether the request succeeded or failed, with an optional error message in the third return value. None

BlockchainContract

Metadata about a smart contract on the blockchain.

Properties

Property Name Return Type Description Tags
address string The address of the contract. Read-Only
name string The name of the contract, if it has one. Read-Only
description string The description of the contract, if it has one. Read-Only
symbol string An abbreviated name for the contract. Read-Only
count integer The number of tokens contained in the contract, if available. Read-Only

BlockchainToken

Metadata about a token stored on the blockchain.

Properties

Property Name Return Type Description Tags
contractAddress string The address of the contract this token belongs to. Read-Only
tokenId string The ID of this token within its contract. Read-Only
name string The name of the token, if it has one. Read-Only
description string The description of the token, if it has one. Read-Only
rawMetadata string The raw, unprocessed metadata value from the token. This could be anything, including a URL, JSON string, etc. Read-Only
ownerAddress string The wallet address of the token's owner. Read-Only
creatorAddress string The address of the token's creator. Read-Only

Functions

Function Name Return Type Description Tags
GetContract() BlockchainContract Returns the contract this token belongs to. None
GetAttributes() Array<BlockchainTokenAttribute> Returns an array of this token's attributes. None
GetAttribute(string attributeName) BlockchainTokenAttribute Returns the attribute with the specified name. Returns nil if this token does not contain the desired attribute. None

BlockchainTokenAttribute

A single attribute on a BlockchainToken.

Properties

Property Name Return Type Description Tags
name string The name of the attribute. Read-Only

Functions

Function Name Return Type Description Tags
GetValue() string Returns the attribute's value as a string. None

BlockchainTokenCollection

Contains a set of results from Blockchain.GetTokens() and related functions. Depending on how many tokens are available, results may be separated into multiple pages. The .hasMoreResults property may be checked to determine whether more tokens are available. Those results may be retrieved using the :GetMoreResults() function.

Properties

Property Name Return Type Description Tags
hasMoreResults boolean Returns true if there are more tokens available to be requested. Read-Only

Functions

Function Name Return Type Description Tags
GetResults() Array<BlockchainToken> Returns the list of tokens contained in this set of results. This may return an empty table. None
GetMoreResults() <BlockchainTokenCollection, BlockchainTokenResultCode, string error Requests the next set of results for this list of tokens and returns a new collection containing those results. This function may yield until a result is available. Returns nil if the hasMoreResults property is false, or if an error occurs while fetching data. The status code in the second return value indicates whether the request succeeded or failed, with an optional error message in the third return value. None

Box

  • New: Adds a new type: "Box", a 3D box aligned to some coordinate system.

Functions

Function Name Return Type Description Tags
GetCenter() Vector3 Returns the coordinates of the center of the box. None
GetExtent() Vector3 Returns a Vector3 representing half the size of the box along its local axes. None
GetTransform() Transform Returns a Transform which, when applied to a unit cube, produces a result matching the position, size, and rotation of this box. None

Camera

  • New: Added isCameraCollisionEnabled property.

Properties

Property Name Return Type Description Tags
isCameraCollisionEnabled boolean When true, this camera will collide with objects that have camera collision enabled. When set to false, the camera will not collide with any objects. Defaults to true. Read-Write

StaticMesh

  • New: Added StaticMesh:GetBoundingBox().

    Function Name Return Type Description Tags
    GetBoundingBox([table parameters]) Box Returns a Box describing the mesh bounds. The Box span may exceed the exact extrema of the object. Optional parameters can be provided to control the results:
    inLocalSpace (boolean): If true, the box will describe the bounds in the mesh's local coordinate system. Defaults to false.
    onlyCollidable (boolean): If true, the box will only describe the bounds of the mesh's collidable geometry. This can be affected by collision settings and network context. Defaults to false.
    None

World

  • New: Added World.GetBoundingBoxFromObjects().

    Function Name Return Type Description Tags
    World.GetBoundingBoxFromObjects(Array<CoreObject> objects, [table parameters]) Box Returns a Box describing the combined bounds of a list of objects. The Box span may exceed the exact extrema of the objects. Optional parameters can be provided to control the results:
    onlyCollidable (boolean): If true, the box will only describe the bounds of the mesh's collidable geometry. This can be affected by collision settings and network context. Defaults to false.
    None

UIControl

  • New: Added touch events to of UIControl. They behave similarly to the respective methods in Input but when a specific instance of a hittable UI object is interacted with.

    Event Name Return Type Description Tags
    touchStartedEvent Event<UIButton, Vector2 location, integer touchIndex> Fired when the player starts touching the control on a touch input device. Parameters are the screen location of the touch and a touch index used to distinguish between separate touches on a multitouch device. Client-Only
    touchStoppedEvent Event<UIButton, Vector2 location, integer touchIndex> Fired when the player stops touching the control on a touch input device. Parameters are the screen location from which the touch was released and a touch index used to distinguish between separate touches on a multitouch device. Client-Only
    tappedEvent Event<UIButton, Vector2 location, integer touchIndex> Fired when the player taps the control on a touch input device. Parameters are the screen location of the tap and the touch index with which the tap was performed. Client-Only
    flickedEvent Event<UIButton, number angle> Fired when the player performs a quick flicking gesture on the control on a touch input device. The angle parameter indicates the direction of the flick. 0 indicates a flick to the right. Values increase in degrees counter-clockwise, so 90 indicates a flick straight up, 180 indicates a flick to the left, etc. Client-Only
    pinchStartedEvent Event<UIButton> Fired when the player begins a pinching gesture on the control on a touch input device. Input.GetPinchValue() may be polled during the pinch gesture to determine how far the player has pinched. Client-Only
    pinchStoppedEvent Event<UIButton> Fired when the player ends a pinching gesture on a touch input device. Client-Only
    rotateStartedEvent Event<UIButton> Fired when the player begins a rotating gesture on the control on a touch input device. Input.GetRotateValue() may be polled during the rotate gesture to determine how far the player has rotated. Client-Only
    rotateStoppedEvent Event<UIButton> Fired when the player ends a rotating gesture on a touch input device. Client-Only

Miscellaneous

  • Changed: Player:TransferToScene() now works in preview mode.
  • Changed: Deprecated Player.bindingPressedEvent, Player.bindingReleasedEvent, and Player:IsBindingPressed() in favor of the newer input binding system exposed in the Input namespace.

Learn more on our API documentation site.

Core Content

  • New: Added a new variation "Live Harmonica Version" to Country & Western Music Score Set 01 and "Acoustic Campfire Stories" Music Construction Kit (Sections) 01
  • New: Added the following SFX to the Core Catalog:
    • Creature Crab Crustacean Gargle Breathing 01 SFX
    • Creature Crab Crustacean Gargle Breathing Loop 01 SFX
    • Creature Crab Crustacean Gargle Clicky Clacky 01 SFX
    • Creature Frog Cartoon Ribbit VO Jump Grunt Bit 01 SFX
    • Creature Frog Cartoon Ribbit VO Jump Grunt Rib 01 SFX
    • DJ Vinyl Record Scratch Sequence 16 SFX
    • DJ Vinyl Record Scratch Sequence 16 SFX
    • DJ Vinyl Record Scratch Sequence 16 SFX
    • DJ Vinyl Record Scratch Sequence 17 SFX
    • DJ Vinyl Record Scratch Sequence 17 SFX
    • DJ Vinyl Record Scratch Sequence 17 SFX
    • DJ Vinyl Record Scratch Short Sequence 08 SFX
    • Female Young Adult Generic VO Attack 01 SFX
    • Female Young Adult Generic VO Jump Grunt 01 SFX
    • Female Young Adult Generic VO Pain 01 SFX
    • Female Young Adult Generic VO Pain Attack 01 SFX
    • Fireworks Explosion Launch Whistle Crackle 01 SFX
    • Guitar Impacts Foley Heavy 01 SFX
    • Guitar Impacts Foley Light 01 SFX
    • Hiphop Hihat Tasty Hit Impact 01 SFX
    • Horse Huffing Robotic 01 SFX
    • Horse Huffing Snort Robotic 01 SFX
    • Horse Snort Robotic 01 SFX
    • Hula Hoop Plastic Beads Shake Drop Handling 01 SFX
    • Hula Hoop Plastic Beads Spin 01 SFX
    • Lute Guitar Auto Harp Out Of Tune Instrument Impact 01 SFX
    • Plastic Bottle With Water Shake 01 SFX
    • VO Crab Guy Damage Attack Grunt 01 SFX
    • VO Crab Guy Damage Death Grunt 01 SFX
    • VO Crab Guy Generic Subtle Grunt 01 SFX
    • VO Crab Guy Jump Grunt 01 SFX
    • Water Rain Drip Drop Wood 01 SFX
    • Water Rain Drip Drop Concrete 01 SFX
    • Water Rain Drip Drop Dirt 01 SFX
    • Water Rain Drip Drop Energy 01 SFX
    • Water Rain Drip Drop Fabric 01 SFX
    • Water Rain Drip Drop Grass 01 SFX
    • Water Rain Drip Drop Ice 01 SFX
    • Water Rain Drip Drop Leaves 01 SFX
    • Water Rain Drip Drop Metal 01 SFX
    • Water Rain Drip Drop Plastic 01 SFX