WELCOME TO DUCK GAME 1.5!!!
Author: indiefoldcreator
Date:
Sun, 24 Sep 2023
Game: Duck Game
Welcome to the Duck Game 1.5, the biggest Duck Game update ever! No seriously. It’s quacktastic. This update is our thank you to all of the long time supporting fans of Duck Game. Many of the things you’ve been asking for are here - 8 player multiplayer, spectator mode, hundreds of fixes and optimization, new maps, new weapons, expanded editor capabilities, customization options, and more.
Thank you for playing Duck Game.
Now, onto this ridiculous list of notes that took us like a week to compile. They were so big, we had to break it into two parts...
Eight Player Multiplayer
Spectator Mode
New Maps
New Weapons & Equipment
Added Hats from Switch Version
Improved Mod / Custom Content Support:
ADDITIONAL NEW FEATURES AND IMPROVEMENTS
GAMEPLAY
CHAT IMPROVEMENTS
UI IMPROVEMENTS
VISUAL / SOUND / GRAPHICS IMPROVEMENTS
PERFORMANCE AND OPTIMIZATION
MAP EDITOR IMPROVEMENTS
NETWORKING:
QUALITY OF LIFE:
CONSOLE CHANGES
Thank you for playing Duck Game.
Now, onto this ridiculous list of notes that took us like a week to compile. They were so big, we had to break it into two parts...
Eight Player Multiplayer
- Duck Game now supports up to 8 Players
- Added eight player versions of a number of levels
- Added 'Eight Player' object to level editor which can be placed to designate a level as an eight player level
- Creating a game via invite now automatically supports up to 8 players
Spectator Mode
- New Spectator feature!
- Games can support up to 4 spectators in addition to the new 8 player limit
- Spectators get to wiggle around at the spectator table and drink their favourite beverages
- Added Melon Soda for spectators
- Spectator names appear purple in chat and connection windows
- Spectator duck color can be changed by holding strafe and pressing ragdoll
- You can now host a "dedicated" server, allowing a game to be passively hosted and watched without a present player
New Maps
- Lots and lots of new maps
New Weapons & Equipment
- Added Duct Tape - Now you can tape two weapons together!
- Added The Dandylion - You’ll shoot your eye out, kid!
- Added Camping Rifle - Trap enemy ducks in a cozy sleeping bag
- Added Energy Scimitar - It’s a laser sword, but cooler
- Added Pokeyhead - Pierce enemies and items from below with this handy new hat!
- Added Powered Holster
Added Hats from Switch Version
- Wahhs, Postals, Kerchiefs, UUFOs, B52s, Zeros,Clams, Bigearls, Toeboys, Waffles, and Diplomats, a top hat with 270 flags to choose from to use as a cape
Improved Mod / Custom Content Support:
- Custom hats can now be loaded from PNG files in the game directory
- Hats now support metadata (put an extra line of pixels to the right side of your hat- A 32x32 hat becomes 33x32, 64x32 -> 65x32, etc.)
- The Red value of the pixel determines what type of metadata it is. Currently supported is HatIsTail(R = 0), and Offset(R = 1, G = 128 - X, R = 128 - Y) (128, 128 means zero offset)
- Custom rocks are now supported:
- If you make your custom hat texture 24 pixels higher (32x32 -> 32x56 for example), then the bottomLeft 24x24 pixels will be read as a custom rock.
- Added support for viewing mod exception stack traces through mod browser
- You should now be able to play levels with local mods online
- Levels with mods containing workshop ID's will no longer be considered levels with 'local' mods, even if the mods are located locally
- Improved mod crash detection
- Mod.Debug.Log should no longer severely lag game when debugger is attached
- The steamprofiles and invitelinks mods by eim64 are now autodisabled on startup to prevent crashes due to changed UI code because these mods have been implemented officially!
- Levels from a mods’ Content/Levels folder are now shown in the level browser
- Mod content load errors will now be shown, and miods with content load errors will now appear in the mod browser list
- Restored a number of functions that various mods were accessing
- "Disable Mods?" window that appears before creating/joining online games can now be disabled
- You will now get a "Download mods?" notification when joining a server with different mods than yours through an invite
- Crash windows will no longer open when a mod fails to load, unless the '-moddebug' command line option is present
- Texture/Reskin packs are now officially supported (Add a folder in Mods/Reskins that mimicks the contents of the Duck Game/Content directory)
- Texture/Reskin packs are now officially supported (Add a folder in Mods/Reskins that mimicks the contents of the Duck Game/Content directory)
- Client reskin mod should now be working again
- Added workshopIDFacade, namespaceFacade and assemblyNameFacade to Mod.cs to allow DEV versions of mods to define the ID's and Names of their release counterparts, allowing compatibility between them
ADDITIONAL NEW FEATURES AND IMPROVEMENTS
- Ducks now breathe. As ducks should.
- Added flagpole furniture for your room
- Added 'Trick Shots' to stats screen
- New pipes! Use these to traverse the map, and also to your immediate death.
- Added a game paused indicator
- Added an indicator for when host skips a level
- Duck ragdolls are no longer torn apart so wildly while flying through the air, much to their satisfaction
- Little men may now grow freely, even when you reach level 20.
- Hats are now drawn on netted ducks
- Screen will no longer show up in rooms with backgrounds
GAMEPLAY
- Several improvements to Team hats
- Team hats now have the lowest pickup priority of all props, which should prevent players from picking up a hat when they want something useful.
- Team hats now go underneath everything
- Team hats no longer block doors or spawners
- Team hats no longer work for pressing buttons
- Team hats will now drop at feet if replaced by an equipper
- Darts really do stick to walls again now!
- Dartgun now works at point blank range
- Dart guns now work much closer to as intended online
- Implemented a dozen more giant icicle breaking situations
- Icicles now react to death laser, quad laser, darts
- Strafe sliding into a wall will now make your duck stand up
- Clicking and dragging the mouse should now allow any rightstick function (tongue, waving rock throw signs, etc)
- Tongue-stuck ducks will now fall if what which they stuck their tongues on is destroyed
- Made crates less shiny because crates aren’t shiny
- Improved platform fallthrough code
- Large item crates can no longer be moved around
- Subtly increased velocity needed for a disarm (prevents waterflow objects from disarming, hopefully prevents a number of unintentional ragdoll disarms)
- Rock collision is now accurate when raised against wall (also helps prevent rock camping)
- Killbox and equipment collision boxes are now accurate when sliding (helps prevent rock camping)
- TV stuck onto spike helmet now functions properly
- The Rocket launcher no longer has slight rocket speed variation, and now has perfect accuracy (it was 95 percent accurate previously)
- The Sword should now properly push other ducks online
- Netting a sword wielding duck is now consistent between online and offline (the previously held sword no longer immediately kills the netted duck when playing online)
- Sharpshot vertical kickback has been reduced while flapping wings
- Insta Unragdolling is back
- Flying Nets no longer block bullets
- Changed timing on spawncannon feedback
- First jump when spawning in water is no longer dampened
- Scimi jumping is now possible with keyboard control schemes combining 'jump' and 'up' into one button
- You can now speed up quad laser bullets by hitting them with a sword in the same direction (why wasn't this possible before??)
- Bananas are no longer made of metal
- Drumset now appears in front of blocks
- Team Hats no longer disarm or push ducks
- Reduced time it takes to load golden Oldpistol, Musket, Blunderbuss and Bazooka
- Fall deaths will now occur only if the player's duck is off the bottom of the camera, in addition to being below the level. This should prevent dying in midair when skirting the bottom of levels
CHAT IMPROVEMENTS
- Added chat Text to Speech accessibility option
- Russian font support
- Added support for non-english keyboards
- Made chat bubbles less transparent to improve readability.
- Improved black duck's chat readability
- Custom mojis!
- put an 11x11 or 28x28 png into MyDocuments/DuckGame/Custom/Moji then type it's filename in chat like this- :mymoji:
- Received custom moji names are now shown in the Dev console (~)
- Received Mojis can be stolen by typing their name into chat
- Removed arbitrary moji sub-size limit, custom mojis can now be any size < 56x28
- Chat emojis now use : instead of @ . For example, :sadface:
- Chat/Connection indicators now appear on netted ducks/ragdolls
- Chat avatars now have bodies and quack
- Added 'bold' and 'italic' suffixes for 'chat font ' command
- Added custom font support for chat font via options menu More.. section, or through console commands 'chat font' and 'chat font size
- Added chat filtering, sentence enhancers can be re-enabled via options menu
- Chat size has been corrected
- (A new Tiny size has also been added, players with existing data may find their chat automatically set to tiny. New players will default to Regular chat size)
- Added custom font support for chat font via options menu More.. section, or through console commands 'chat font' and 'chat font size
UI IMPROVEMENTS
- Mallard skip signs should look a bit better
- Game now supports resolution settings
- Game should now properly support non 16:9 ratios (gameplay camera follows screen ratio, UI cameras are locked to 16:9)
- Corrected squishing issues on non 16:9 monitors
- Fullscreen settings are now updated in the Draw function instead of in Update
- Windowed Fullscreen is no longer default
- VSYNC should now work for non 60hz monitors
- Error uploading now supports Japanese
- Simple Hiragana/Katakana support (sorry about the font, I found it online. I'll make an improved one later!)
VISUAL / SOUND / GRAPHICS IMPROVEMENTS
- Improved mind control ray sync visuals
- Changed waterfall layering, added waterfall edge pieces
- Improved level transition rendering
- Graphics optimizations and improved layering code
- Major changes to hat metapixels
- Reimplemented all ingame audio using NAudio, should reduce audio stutter and improve performance. Should also allow audio device switching while game is running. This also seems to seriously reduce random framerate stutters too (at least on my computer), I don't know what the heck happened to XNA's default audio playback but it's really not very good anymore.
- Reduced size of all sound effects (trimming, converting files that should have been mono to mono). This should improve load times and reduce memory footprint.
- Sound now supports Exclusive
- Reduced volume of sound when things light on fire
- Changed Duck #5's color to improve clarity
- Improved sun and point light rendering
- Made lights more dynamic
- Further sound engine optimizations
- All mallard colors are now more clear
- Red hot glow is now more obvious and affects props as well as guns
- Improved frame timing for when VSYNC is disabled (no longer using XNA's IsFixedTimestep)
PERFORMANCE AND OPTIMIZATION
- Improved level loading times
- Added limit for snow generators
- Added redundant collision function implementation for checking layer, ignore object, etc which should improve collision check performance
- Added more stuff to prevent Alt-Tab crashing
- Removed network overload message, as it wasn't reporting anything useful (or any actual overload for that matter)
- Completely removed threading from the initial loading process. This actually improves loading times, and should fix a number of lockups/crashes.
- Improved object serialization/deserialization performance, should improve level/game loading times
- Improved asset lazy load, this should help reduce stuttering during the games initial screens
- Massive collision code optimization
- Removed unnecessary XInput check in DInput driver that was causing a moment of lag on startup
- Removed cloud settings menu, if you want to disable or enable cloud, or manage cloud files, please use the steam UI or a 3rd party tool
- Improved purple box synchronization
- Made a change that should help reduce crashing when changing back and forth from fullscreen (huge thanks to Dan for spearheading this and finding the issue)
- Reduced unnecessary steam cloud activity (Steam's API's weren't updating file timestamps when writing cloud files unless said files had changed.
- Added saveIndex variable to all save data which increments upon each save, ensuring save data timestamps are always up to date)
- Major optimizations to ghost state refreshing system, as well as improvements to general network syncronization accuracy
- Resolution logging in crash logs should now be more accurate
- Improved crash logging
- Removed gamepad enumeration thread in favor of a callback system (should help reduce framerate spikes)
- Added "Alt. Timestep" setting for using original XNA timestep (which doesn't work correctly at all on my computer)
- No longer preloading music, should decrease memory footprint
- Synchronized save data is now saved in a Documents/DuckGame sub folder corresponding to your Steam ID number. Existing save data will automatically be moved there, anything outside of this subfolder will *not* be synchronized to the cloud.
- things.RefreshState is now called before a network level is 'started'. This should fix some object initialization errors (and hopefully not create new ones..)
- Crashlogs now show RAM details
- Cleaned up bug report log format
- All challengedata is now stored in player profiles. The ChallengeData folder will remain for existing users, but once the game has been started its data will be migrated and it will no longer be used.
- Rewrote cloud integration, it should now detect deleted/modified local files (testing needed)
- Custom levels are no longer preloaded, this should improve load times for people with many levels (and add a bit of lag when opening Custom Levels menu for the first time)
- it will end the challenge as soon as MAX TROPHY is reached.
- Crash/Alt-F4 related disconnects should now be detected much quicker.
- Optimized level format
- Reduced lag spikes caused by Xbox controller "IsConnected" check.
- Optimized save data (should be smaller and load faster)
- Changed GC settings to hopefully reduce framerate spikes
- New netcode to prevent loss of state information in high jitter situations (packets arriving out of order)
- Removed a bunch of unused data from BufferedGhostState (may improve network GC hitches, may already have been optimized out when building in release mode)
- Added file saving safeties to reduce crashing on people with saves synchronized to dropbox/onedrive
- Windows' new(ish) Rumble over Bluetooth feature doesn't seem to limit outgoing packets in any way, which was causing the game to become extremely laggy with bluetooth controllers. It was also causing bluetooth controllers to lose their composure and disconnect randomly. I'm limiting sent rumble messages on my end now, which should greatly improve wireless controller support. As always hardcore ducks should use a keyboard or a wire for best input performance.
MAP EDITOR IMPROVEMENTS
- New editor feature:
- Holding CTRL while dragging out background tiles will automatically select and place tiles adjacent to the selected tile allowing entire portions of the tileset to be drug out all at once. (this should help make adding Danny DeVito to levels easier). This can also be done on gamepad by holding down the tile placement button, then holding the MENU1(SHOOT) button at the same time and moving. On an XBOX controller with default settings this means holding A and X.
- New city background tileset
- Added box selection/mirror/flip functions to level editor
- Added BuildingFramework tileset, an indestructible tileset which can be placed below normal blocks
- Improved editor object placement - Quickly dragging out a line of objects should now form a consistent line without gaps
- Added check when loading older levels for *extremely* large Y values, any objects with bozo values will not be loaded
- Mouse will now automatically move to the current selected tile position when picking background tiles from the editor using MENU 1 (H by default)
- Improved window focus detection, should prevent random tiles being placed a million miles offscreen when minimizing while using the editor (if you're ever making an XNA game I don't recommend using Game.IsActive)
- Mouse input is now disabled until all buttons are released when clicking back into the Duck Game window. This should help prevent unwanted block placement in the editor.
- High-Res texture packs are now possible (add the line 'hd' at the bottom of info.txt)
- Reskin packs now support limited color replacement (Include a 'colors.txt' file, each line represents a string/hex pair that replaces a Colors.Color or Color.Color static data member. For example, to replace menu color with red: MenuOption=0xC0202D
- Existing texture packs are now supported (thanks Yupdaniel!)
- Vanilla maps can now be selected from custom map selection and put into playlists
- Most vanilla levels now have explicit 1v1 spawn configurations. You can set your own 1v1 spawn configs by setting the 'secondSpawn' property on any duck FreeSpawn
- (for example, have secondSpawn = false for spawns located on the left side of the level, and secondSpawn = true for spawns on the right to ensure 1v1 ducks never spawn on the same side. Note that secondSpawn does *not* explicitly mean any particular color of duck.
- 'My Levels' cloud folder is no longer a thing. Everything goes through the normal DuckGame/Levels folder again like always.
- Level browser in editor now remembers what folder it left off in
- Previews now show custom tilesets (you may have to delete My Documents/Duck Game/EditorPreviews)
- CTRL + Middle Click in editor now activates layer selection swap mode- hold it when placing background tiles to select foreground objects and vice versa
NETWORKING:
- Changed Invite lobby type from Friends to Private to prevent Dan Rando from just rolling in (this potentially means a bit more 'can you resend the invite' in the future unfortunately, as it disables right click -> join functionality on invite lobbies)
- Rewrote connection system and level synchronization system
- Added 'netData' to Profile class, which can be used to easily and automatically synchronize string->object pairs over the network. Example: DuckNetwork.profiles<0>.Set
("crazyName", "wowman") - Rewrote net synchronization for GoodBook
- Snow tileset freezing and melting is now synchronized
- Grenade Cannon should now be synchronized properly
- Bonk stars should now be synchronized
- Huge laser blasts are now synchronized
- Synchronized more warp gun sounds
- Getting smacked sideways with objects is now synchronized
- Synchronized Present sounds/effects
- Synchronized hat selector
- Basketball whistle sound is now synchronized
- Fire synchronization has been improved a bit, should result in less random lighting on fire online.
- Synchronization of objects is now strictly locked between levels, this should help solve many level start desync issues
- Fire position synchronization is now more accurate
- Improved chainsaw fuel leaking synchronization
- Firecrackers now work online
- Disarm knockback now works correctly online
- Added calls to properly upload stats to ensure accurate numbers (no more losing quack numbers)
- New version numbers weren't working correctly causing games not to connect. This should be fixed!
- Changed the way network particles and objects are removed, hopefully this will solve the serious slowdown and lockup issues that have come up online
- Increased resolution of synchronized position and angle variables which should improve the visual smoothness of online play
- Rewrote network particle manager, implemented a limit on the number of network particles to prevent lockups (fire should truly be more accurate now)
- Rewrote cloud integration (again) to minimize unnecessary syncing and improve loading times. Removed 'local files deleted' message in favor of a new cloud file manager window where you can manually delete specific files from the cloud. If you delete files from your save game locally with cloud enabled, they'll come right back unless you delete them through a cloud file manager.
- Massive pings should no longer cause a feedback loop of message resend
- Ping calculation should now be more accurate, and should average out faster during connection. This should hopefully help prevent ducks from moving early.
- Restored network authority system to round robin configuration (dropped pickup time comparison, it was leading to major desync issues.
- If two ducks pick up and object at the same time, the duck with the lower network index will get to keep the object. To avoid host advantage, the network index is calculated as (DuckNetwork.levelIndex + duck.networkIndex) % numberOfPlayers, so the advantage order will change every level.
- Changed some lobby sync code, this should result in faster initial connections and a smoother lobby experience (that is of course if it doesn't throw a wrench into things instead)
- Reported Ping numbers should now be more accurate
- Reduced network bandwidth required for sending removed objects
- Reduced lag spikes that occurred in -nothreading mode
- Removed network threadlock (may improve performance, hoping to solve a particular connection timeout issue)
- Send.Message is now ignored when called online (why wasn't this the case before?)
- General network synchronization improvements
- Rewrote GhostObject synchronization, reducing redundant data and grouping together state messages to greatly reduce network traffic (should help with lag and performance!)
- Game now properly sends disconnect message on intentional disconnects, so feedback should be a lot better for disconnects now.
- Disarms are now accompanied with a special network message to make them more reliable online
- Hopefully reduced situations where 2 or more players would claim to own the same object online. (this should reduce teleporting/getting killed by invisible objects)
- Added strict level index filtering for non-reliable NetMessage
- Rewrote net synchronization for GoodBook
QUALITY OF LIFE:
- You can now view a players steam profile page by selecting their name in the online pause menu (thanks eim64!!)
- MAX TROPHY can now be set under "ADVANCED" in the arcade options menu, if you've gotten the best trophy on a challenge. This is for speedrunning.
- Added "browse" button for file browsing dialogues that will open the current folder in Windows Explorer
- Backfill fix is now enabled by default to prevent discord overlay artifacting
- Abandoned green mallard heads in favor of color clearness
- Alt-Enter no longer brings up chat window
- Added IME support which can be enabled through the options menu
- ESC can now be bound as a control
- Slightly zoomed out camera on random levels to assist with navigation
- Added the option to merge 'DEFAULT' account with main steam account (this will be done automatically if the game detects that there's no challenge progress on your steam account)
- DG screenshot command is now button combination SHIFT + F12. F12 still takes normal steam screenshots
- ItemSpawners set with Random and KeepRandom properties set now appear orange
CONSOLE CHANGES
- Always remember not to put linebreaks in your command line!
- Added -netdebug command line for enabling the network debugger. Hover the desired game instance and press START to join the game with it, each game will automatically host and join the first game. To override automatic join, hold SHOOT while pressing START.
- Added Duck.invincible, and Duck.disableCrouch (thanks DORD!)
- Added accelerationModifier variable on Duck for modifying duck speed, Duck.jumpSpeed now properly affects jump
- Added '-command' command line option, which allows DevConsole commands to be called on startup. Commands must be in quotes, and multiple commands can be defined with additional '-command' elements. For example:
- -command "level forest02" -command "give player1 pistol"
- Added shortcut for 'level' console command: 'lev'
- Added custom font support for console
- Added new console command options to 'level', including 'title', 'rockthrow', 'pyramid' and 'next'
- Added '-oldangles' command line option for enabling old angling code, overriding the 'oldangles' console command
- Added 'oldangles' console command, which will enable the old pre-beta direction changing code. This offers no objective benefit, and exists solely for personal preference!
- Changed console resize commands, they are now accessed through 'console': console width, console height, console scale, console font, console font size.
- Additional dev console commands can now be added via DevConsole.AddCommand. For Example:
- AddCommand(new CMD("level", new CMD.Argument<> { new CMD.Level("level") }, (cmd) => { Level.current = cmd.Arg
("level"); }) { cheat = true, aliases = new List () { "lev" }, commandQueueWaitFunction = () => { return Level.core.nextLevel == null; } }); - Command console 'level' command now supports 'editor' and 'arcade'
- Command console now supports copy and paste (hi Dan)
- Command console 'give' command now supports 'e' as a third parameter, which will equip the spawned item.
- Command console 'give' command now supports 'h' as a third parameter, which will holster the spawned item (spawns a holster if no holster exists). 'hp' spawns a Power Holster if none exists.
- Command console now supports running multiple commands in a row by pasting (Ctrl + V) a line split list of commands. For Example:
- level forest02
- give player1 pewpewlaser
- give player2 energyscimitar
- wait 60
- give player2 chestplate e
- give player2 helmet e
- wait quack
- give player1 flamethrower i
- Custom levels can now be loaded through dev console 'level' command
- Dev Console can now be resized via Graphics settings menu, or through commands dcwidth, dcheight, and dcscale
- Holding SHIFT while using PgUp, PgDown, Home and End in the console will allow faster browsing through old log messages
- DevConsole is no longer teensie tiny, now has line numbers and PageUp/PageDown can be used to scroll through output
- Dev console no longer opens when opening Discord overlay with Shift + ~
- Dev console command "showcollision" now functions properly, and will not function when playing online
- You can now move the cursor in the dev console, and toggle through all recently typed commands
- Command console 'level' command now supports 'editor' and 'arcade'
Write your comment!