Commit Graph

1297 Commits

Author SHA1 Message Date
Benau
a53307cc14 Reset only physical objects in onGo 2018-09-14 13:43:44 +08:00
hiker
1291d2c0d3 Fix crash in case of multiple item collection and different
item ids on client and server.
2018-09-13 11:29:40 +10:00
Benau
dd15947aa1 Use ServerConfig for setup server 2018-09-11 14:06:30 +08:00
Benau
0d93fe427e Initial work on server_config.xml 2018-09-11 10:13:33 +08:00
Alayan-stk-2
fb43b173d6 Don't count ghost karts for highscores (#3416)
* Add function to get the number of non-ghost karts

* remove print

* Update function call to not count ghosts

* Don't count ghost karts for highscores
2018-08-29 19:50:38 -04:00
Alayan-stk-2
80555f4905 Display soccer timer after a goal (#3411)
* Use shouldDrawTimer overrides for tutorial and soccer worlds

* Add isActiveRacePhase

* Update shouldDrawTimer

* Remove duplicate check

It also allows displaying time in soccer after a goal
2018-08-29 18:33:01 -04:00
Alayan-stk-2
ed8b1fc185 Fix egg hunt finish time (#3402)
* Fix #3264

* Fix the fix
2018-08-27 18:44:40 -04:00
Benau
e5925a53b7 Use the network timer synchronizer to start game 2018-08-27 09:16:35 +08:00
Benau
73ac4f165b Add indication for collected flags in GUI and map 2018-08-21 01:31:49 +08:00
Benau
7ad349a7ed Implement auto flag returning after some timeout 2018-08-20 16:19:32 +08:00
Benau
f48491c279 Make sure all karts has the same position before go phase 2018-08-20 15:40:29 +08:00
Benau
552028e791 Put the kart back to its own flag base like rescue if direct hit in CTF 2018-08-20 14:33:17 +08:00
Benau
7970d138e5 Fix flag returning 2018-08-19 14:30:00 +08:00
Benau
8b3772470a End CTF early if no red / blue players connected 2018-08-18 12:08:12 +08:00
Benau
df69e7f6b6 Implement capture and return of flags 2018-08-18 01:05:00 +08:00
Benau
afe5bc2a16 Fix isRaceOver in CTF 2018-08-17 16:46:56 +08:00
Benau
9905ebe09d Add the required GUI code for CTF 2018-08-17 12:54:38 +08:00
Benau
73c264df94 Add support for CTF map 2018-08-16 02:09:44 +08:00
Benau
03728708cd Rename soccer team to kart team for CTF 2018-08-15 15:13:55 +08:00
Benau
64595a7b18 Initial work on FFA in network 2018-08-13 00:59:20 +08:00
Benau
6bdec3d01a Add initial framework for FFA and CTF in network 2018-08-12 10:57:37 +08:00
Benau
95f3dfc01a End network game early if there is no red or blue team player 2018-08-10 15:08:19 +08:00
Benau
93aeeda12b Fix rewind issue of rubber ball 2018-08-06 14:37:55 +08:00
Benau
79d1178626 Improve kart animation handling in network 2018-08-04 16:29:49 +08:00
Benau
1e53349f52 Rewind bowling and cake in network game 2018-07-25 15:33:49 +08:00
Benau
4a9a0fba0f Make flyable to work with shared_ptr 2018-07-24 15:43:31 +08:00
Benau
60bfc1840b Port rewinders to use shared_ptr 2018-07-24 14:22:20 +08:00
Benau
6369256022 Reset rewinding manager at each online or offline game 2018-07-24 14:18:43 +08:00
hiker
1a9f0163e0 Try to fix odd behaviour of soccer ball. 2018-07-23 17:52:12 +10:00
auria.mg
a3a5befe63 Keep working on #3345, not there yet 2018-07-19 21:09:33 -04:00
auria.mg
f4dced8172 A few steps forward for issue #3345, more issues remain 2018-07-19 20:56:46 -04:00
Benau
1f7f64f3b5 Prevent rescuing in soccer mode to go back to self goal immediately 2018-07-20 01:36:02 +08:00
Benau
7ebd1fabd9 Add exception handling to prevent player hacking network string 2018-07-19 14:23:35 +08:00
Benau
1ba361ae23 Reset track objects during onGo when race start for network 2018-07-19 01:55:05 +08:00
Benau
1d7a9e9465 Prevent negative time in network soccer when finishing 2018-07-19 01:17:52 +08:00
Benau
c5cdfcebfe Finish soccer mode in network 2018-07-18 16:37:09 +08:00
Benau
49d7a2fbbc Use count up ticks on rewinding for time limit in soccer game 2018-07-13 23:34:50 +08:00
Benau
23e5dace40 Allow starting soccer mode in network with goals limit 2018-07-13 21:29:26 +08:00
Benau
565dfcef96 Only send state for moving track object 2018-07-13 10:47:30 +08:00
Benau
a8959f604c Fix crash when in-game menu opened when going to result screen in network game 2018-07-11 15:37:55 +08:00
Benau
908735b1b1 Remove local state saving at t = 0
A proper same frequency local state saving for client will come later
2018-07-11 13:29:30 +08:00
Benau
b537df54fc Move scripting update to updateGraphics 2018-07-11 11:08:53 +08:00
Benau
17d1bddf0d Don't re-update scripting engine during rewind 2018-07-08 12:58:57 +08:00
Benau
674faad226 Fix #3259 2018-07-02 15:40:27 +08:00
Benau
d3f7cb7999 Move ticks adjustment to main_loop 2018-07-01 14:31:42 +08:00
Benau
72fdfe1ac3 Merge remote-tracking branch 'origin/master' into curved 2018-06-21 01:14:38 +08:00
Benau
6eb7bf6bba Move camera update to update graphics 2018-06-18 13:36:56 +08:00
hiker
6bcd1b4c58 Merge remote-tracking branch 'origin/master' into STK-helper-ItemWeights 2018-06-17 01:05:07 +10:00
hiker
5207e9a38b Improved implementation of powerup collection weight. 2018-06-17 01:03:37 +10:00
Benau
e8c4f74a20 Revert "Show remote player in the past"
Use a proper smoothing for all players later
2018-06-16 14:08:02 +08:00
Benau
e823babb90 Show remote player in the past 2018-06-09 20:16:56 +08:00
hiker
9c6b17aeba Merge branch 'master' of github.com:supertuxkart/stk-code 2018-06-08 11:00:14 +10:00
hiker
cd80101bdf Removed execute permission (for unknown reasons VS makes source files
executable when it saves them).
2018-06-08 10:59:13 +10:00
hiker
e05990bc1c Fixed compilation problem. 2018-06-08 10:55:45 +10:00
hiker
b0da0f640a Merge remote-tracking branch 'origin/master' into network-items,
fixed conflicts.
2018-06-08 10:55:14 +10:00
Benau
5b62d03323 Fix wrong formula
Alayan said: +25% and +15s
2018-06-08 01:15:28 +08:00
Benau
785aaf7647 Add auto end network game (implicitly on for ranked server) 2018-06-07 14:28:06 +08:00
Alayan-stk-2
79e3d298ce Correct finish time for GPs when skipping a race (#3276)
* Make human players have a correct finish time when skipping a GP race

* Don't compute the estimated finish time twice
2018-06-03 19:50:24 -04:00
QwertyChouskie
7cb0ffe844 Fix segfault in cutscene when pressing CTL+Shift and when using FPV cam (#3279)
Fixes https://github.com/supertuxkart/stk-code/issues/2876
2018-06-01 21:25:56 -04:00
Deve
a39007d48e Fixed invisible spare tire kart.
Fixes #3277
2018-06-01 22:12:51 +02:00
hiker
eebd5f2534 Removed unnecessary #include. 2018-06-01 09:42:36 +10:00
Alayan-stk-2
670a40cb05 Improvements to finish time accuracy (#3273)
* Add time info for recent positions

* More accurate finish time

* Rebase changes on the version with overrides
2018-05-27 18:04:57 -04:00
Alayan-stk-2
175b932b13 Correct finish time for egg hunt ghosts (#3263)
* Use replay data for ghost karts finish time

* Compute correct finish time for egg hunts replays
2018-05-21 18:12:16 -04:00
Alayan-stk-2
4fdd3eee38 Ghost finish times based on replay data (#3262)
* New ghost kart function to compute finish time

* Don't estimate the finish time for ghosts, use replay data
2018-05-19 19:23:44 -04:00
hiker
0d850201fb Renamed and split the two newItem () functions into three functions:
placeItem(), placeTrigger(), dropNewItem(). Started to add support
for networked bubble gum (though that's not working, i.e. will crash
atm ;) ).
2018-05-15 10:40:25 +10:00
Alayan-stk-2
7f84dd39a6 Numerous improvements related to ghost replays (#3244)
* Update GUI files for replay improvements

* Updated replay capabilities

* Improve timer formatting possibilities

Mainly, the ability to choose to display or not minutes, and to choose how many digits are shown after seconds (from 0 : second as smallest timestep - to 3 : ms as smallest timestep)

Also displays "mm:ss.ms" rather than "mm:ss:ms".

* Some new list widget possibilities

Like the ability to update the header while the list is displayed (useful to add or remove columns)

* Update ghost kart for the new replay data

* Also update the ghost controller

* Live differences with ghost replays in linear worlds

* Replay-related UI changes

Big changes to the replay selection screen, and small change to the race UI (add the live timer in ghost races) and the race result UI (add the option to directly race against a newly saved ghost).

* Improves the replay action modal dialog

* Fix time-to-ticks regression

* Several requested improvements

* Improved ghost icon

Also updates the license

* GUI changes and improvements to accomodate multi-mode support

* Additional recorded data

* More functions to get the current race state

* Update replay variables to match what is used

* Updated replay-related config values

* Add ghost kart support to easter egg hunt mode

* Transparent attachments for ghost karts

* Use new stored data (color, item type)

Also :
- Interpolate speed for smoother display in watch-only mode
- Coding style improvements

* Fix coding style issues and add UI support for modes

* Fix coding style issues & support for easter egg mode

* Remove leftover prints

* Use getDifficultyName to remove hardcoded values

* Fix attach_ticks and coding style fixes

* Make the position of the timers fully relative

Otherwise, they would tend to touch each other in some resolutions

Also add a comment about the 59.9995f

* Make the list filling code clearer

Also use getDifficultyName

Most of the line changes shown by git correspond to moving around some bits or adjusting indentation.

* Remove a TODO as requested

* Fix dialog being dismissed too soon

* Remove a fixme

* Small clean up

* Fix logging

* Partial #3249 fix
2018-05-13 20:51:52 -04:00
Benau
7926ad9ba0 Progressively adjust time with slow down functionality 2018-05-11 10:43:22 +08:00
hiker
c7c061c7c1 Bugfix: all items were counted as easter eggs :) 2018-05-04 16:36:56 +10:00
hiker
3e518968b3 Added a generic collectedItem() virtual function to world
instead of a special case of easter eggs only.
2018-05-04 10:29:44 +10:00
Benau
f5035a00ea Allow showing paused dialog in network now it doesn't pause timer 2018-05-02 13:17:23 +08:00
Benau
d17fddcac8 Fix handicap in splitscreen and network 2018-05-01 01:10:12 +08:00
Alayan-stk-2
6a25384ed9 SuperTux in Story Mode (and other improvements) (#3207)
* Add SuperTux difficulty & update number of karts

Also make the expert challenge slightly easier to match more the difficulty of other challenges.

* Add SuperTux difficulty & update number of karts & points required

Also give some more time margin in easier difficulties, as it is a hard challenge compared to most.

* Add SuperTux difficulty & update number of karts & points required

Also change the lap count to 4 as it is a very short track (sub 30s)

* Add SuperTux difficulty

Also tweak the expert challenge to have a more appropriate difficulty

* Add SuperTux difficulty & update number of karts

* Add SuperTux difficulty & update number of karts & points required

* Add SuperTux difficulty & update number of karts & points required

Also correct the requirement position, since this is not a FTL race anymore.

* Add SuperTux difficulty & update number of karts & points required

Also slight balancing improvements for the usual difficulties.

* Add SuperTux difficulty & update number of karts & points required

Also adds a position requirement in expert

* Add SuperTux difficulty & update number of karts & points required

* Add SuperTux difficulty & update number of karts & points required

* Add SuperTux difficulty & update number of karts & points required

Also change the number of laps to 5, as this is a very short track. The time requirements for easier difficulties have been kept proportionally similar to before.

* Add SuperTux difficulty & update number of karts & points required

Also change the number of laps to 4.

* Add SuperTux difficulty & update number of karts & points required

Also add a position requirement to expert and intermediate.

* Add SuperTux difficulty & update number of karts & points required

Also change the number of laps to 4, as a lap often is 30s or less in expert/supertux

* Add SuperTux difficulty & update number of karts & points required

* Add SuperTux difficulty & update number of karts & points required

* Rename islandtrack.challenge to gran_paradiso.challenge

* Rename challenge file

* Add SuperTux difficulty & update number of karts & points required

Also makes the time limit in expert less easy and tweak position requirement.

* Add SuperTux difficulty & update number of karts

* Add SuperTux difficulty & update number of karts & points required

* Add SuperTux difficulty & update number of karts & points required

* Add SuperTux difficulty & update number of karts & points required

* Add SuperTux difficulty & update number of karts & points required 

Doesn't unlock the SuperTux difficulty anymore - it's managed elsewhere.

* Add SuperTux difficulty & update number of karts & points required

* Add SuperTux difficulty & update number of karts & points required

* Add new unlock challenges, for difficulty and karts

* Add a lap to oliver's math class

* Replace Northern Resort by Volcano Island

* Replace Volcano Island by Candela City

Candela City was in no (official) GP before this.

Also sets Green Valley to 3 laps.

* Add Northern Resort and remove Fort Magma

In 0.9.3, this GP has only 4 races in Story Mode (5 for the other GPs) because Fort Magma is locked.

Of all the tracks outside this GP before, Northern Resort is one of the hardest, the AI being rather good there.

* Temporary cup for SuperTux challenges

Recolored version of the gold cup

* Update challenge selection UI for the SuperTux challenges

* GUI used before SuperTux difficulty unlocking

This is the old select_challenge.stkgui

* Swap the two sara

* Replace Kiki by another kart to unlock on Benau's demand

* Update for improved Story Mode

* Update for improved Story Mode

* Add support for SuperTux challenges

* Add support for SuperTux challenges

* Add support for SuperTux challenges

* Add support for SuperTux challenges

* Update for SuperTux ; also adds the ability to unlock a challenge by points

* Update for unlocking by points

* Add support for SuperTux challenges

* Add support for SuperTux challenges

* Add support for SuperTux challenges

* Minor changes to function calls

* Update for SuperTux challenges

* Add support for SuperTux challenges

* Update for Story Mode GP changes

* Allows to display the correct number of points for GP challenges

* Set the unlock of the 1st bonus kart to correct non-test value

* Add support for SuperTux challenges

Including a bigger challenge selection diaolg

* Add default value

* Icon to indicate that there is an unlockable

The number of points needed to unlock it are displayed next to it.

* Changed format : the point requirements is now specified in the file

* Changed format : the point requirements is now specified in the file

* Changed format : the point requirements is now specified in the file

* Function for unlock by points UI

* Add default for unlock list node and use requirements node for all

* Make unlockByPoints simpler and more flexible

Now the code will iterate in StoryModeStatus and send the unlock_list challenges for treatment here. The question of getting the right challenge statuses beings solved, it allows for a great simplification and much more flexibility

* Update unlockByPoints declaration

* Adds support for next unlockable UI

* Improve call of unlockByPoints

Also calculations for displaying in the UI how many point the next unlockable by points requires.

* Add icon for next unlockable

* Displays icon/number to make the player aware of the next unlockable

Also displays the number below the icon rather than on the side, for more clarity.

* Changes to display karts in the unlock scene

* Update unlock functions declarations

* New function to clarify code and more logical recently unlocked list management

In the previous version, everything was added to the recently unlocked list at some point, necessitating a clearing at the end of computeActive, which also removed from the list the non-race challenges. Checking if the feature is newly unlocked to add it to the list remove the need of that clearing.

* Declaration for unlockFeatureByList

* Display newly unlocked karts

* Display newly unlocked karts

* Clear the list of recently unlocked features at the end

* Update testing code

* Update unlocks finding function call

* Improve UI scaling

* Fixes indentation

* Update the number of points before checking for unlock by points

* Add const to declarations

* Remove const_cast

* Remove a const_cast

There are other const_cast in the menu debug items (but they are unrelated to this PR)

* Fix menu being bolder
2018-04-29 18:27:03 -04:00
Benau
62ea07ecc8 Try to synchronize timer independent of music 2018-04-24 01:01:47 +08:00
auria.mg
bb88ffc460 Merge branch 'game_protocol' 2018-04-21 19:53:56 -04:00
auria.mg
cbfcc55ebc Fix cutscenes sychronisation, fixes #3213 2018-04-21 19:12:25 -04:00
Deve
8d767f0c8f Fixed flooding with wrong way messages.
Fixes #3214
2018-04-21 22:51:21 +02:00
Benau
0c33803159 Let the network game keep going even race paused dialog shown 2018-04-20 13:30:17 +08:00
Benau
e5c991e3d2 Merge remote-tracking branch 'origin/master' into kobato 2018-04-20 13:03:34 +08:00
Benau
99a25bb837 Implement a proper end and restart race in network 2018-04-20 12:19:58 +08:00
Benau
d4fb888ffa Eliminate disconnected kart 2018-04-20 12:19:58 +08:00
Benau
bd5fc33816 Add billboard text of online player name to non-local player 2018-04-20 12:19:58 +08:00
Benau
d30faece9c Show (online) player name in race GUI 2018-04-20 12:19:58 +08:00
Benau
0c688c7df7 Use music phase instead of race phase 2018-04-20 12:19:58 +08:00
Benau
2a3d57706a Reset timer after finished loading world
It avoid some clients with slower loading time than anybody else hanging
when rewinding
2018-04-20 12:19:58 +08:00
Benau
969b56844b Don't pause timer in thunderbird phase when in offline game
And don't show the dialog at all in network game when thunderbird phase
2018-04-20 12:19:58 +08:00
hiker
4f94615c49 Moved wrong-way timer from kart into linear world. 2018-04-20 12:19:58 +08:00
hiker
da039bf6a9 Renamed member variable and method to better describe them. 2018-04-20 12:19:57 +08:00
auria.mg
92edfe5121 Attempt for #3164 2018-04-20 12:19:57 +08:00
hiker
99d8ad8ac1 Properly fix #3159 (Wrong direction text is displayed twice).
When this is merged with master, the current work around
in #3159 can be reverted.
2018-04-20 12:19:57 +08:00
hiker
ac3c99a3ca Removed support for position-based history files, now only
physics history files are supported.
2018-04-20 12:19:57 +08:00
hiker
98555a8f35 Merge remote-tracking branch 'origin/master' into game_protocol 2018-04-19 10:57:37 +10:00
hiker
95bba525c5 Refacotring: instead of Moveable::update calling updateGraphics,
this is now called separately once per rendered frame from
the main loop. Started to split other objects to have separate
updateGraphics functions (e.g. to fix skid marks issues caused
by previously updating skidmarks even in rewind).
2018-04-18 22:27:06 +10:00
hiker
b17b45d8c5 Fix non-networked races. 2018-04-17 18:48:32 +10:00
hiker
a9a73e643b Save an initial state at t=0 on the client, to make sure they
can always rewind (e.g. in case that an event from another client
arrives before a state from the server).
2018-04-17 18:42:16 +10:00
hiker
8841200a1c Fixed compilation in debug mode. 2018-04-09 21:57:10 +10:00
auria.mg
7543240db0 Merge branch 'Fix_3167_attempt' 2018-04-08 20:51:54 -04:00
auria.mg
61469a6806 Mitigate AI-related edge cases of original fx 2018-04-08 20:47:24 -04:00
Alayan-stk-2
8fae521a94 AI item handling improvements (#3143)
* Prepares for advanced item and nitro usage strategy

Replace the bool determining if usage is random or not by an int allowing several levels of AI item usage.

Add NITRO_ADVANCED mode for nitro usage.

* Adapt for more item and nitro levels

The XML files have to be changed. The logic for the item_skill still has to be done.

* Preparation for the preferred kart in GP

* Preparation for the preferred kart in GP

* Preparation for the preferred kart in GP

* Prepares for advanced item and nitro usage strategy

*  Prepares for advanced item usage strategy

* Preparation for the preferred kart in GP

* Parametrized AI_skill level

* Fix typo

* Fix typo

* Fix typo

* Fire items with a shield on in unrestricted mode

* New function allowing AI to know what flyable is incoming

* New function allowing AI to know what flyable is incoming

* Fix typo

* Update bubble gum AI to new system

In addition of making some functionality depends on AI levels, there are a few overall improvements for the better AIs :
1)Remove the "drop the gum in the last lap" logic. Bad strategy since ever the shield has been added to the gum
2)The protection against flyable is not used if the user holds a swatter and the flyable is a plunger 
3)Holding a swatter no longer blocks the AI from using the shield against a flyable nor from using the gum behind
4)The shield is used to remove bad attachments (bomb, parachute, anvil)
5)Reduce the distance with the kart behind when dropping the gum to reduce misses

* Update swatter AI to new system

The swatter could benefit from several kind of usage improvement. This patch introduce only one, but probably the more important : the better AIs now use it to remove bad attachments

* Fixing #3139

* Fix compile error

* Fix

* Fix compilation

* Fix compilation

* Fix compilation

* Update variable

* Update variable

* Fix non-breaking space issue

* Fix typos

* Revert for compilation

* Revert for compilation

* Update cake AI to new system

* Redefine HandleItems to be position aware

* Redefine HandleItems to be position aware

Also changes bowling ball for the new system.

* Activate shield before hitting box or bad item

Meant for higher AIs.

* Increase lookup distance

Some distance will be needed for the switch

* Temporary fix to avoid a nitro regression

* Fix typo

* Fix typo

* Bubble gum improvements ; explicitely calculate distances to items

* Update Switch to the new system ; use item-distance awareness

Also fix a missing parenthesis

* Change nitro-usage to a numerical parameter

* Change nitro-usage to a numerical parameter

Also update comments to explain the new item-skill

* Change nitro-usage to a numerical parameter

* Change nitro-usage to a numerical parameter

* Change nitro-usage to a numerical parameter

* Update handleNitroAndZipper to the new system

Also fix a naming error, remove the 95% speed limitation on nitro usage

* Adds a small engine boost to nitro

Currently, nitro is very counter-intuitive as it only affects max_speed. This change corrects it. The effect remains small to not upset balance. It is mostly felt when below max_speed, so the can of nitro potential power doesn't change much.

* Improve AI nitro handling

Summary :
1)Makes the AI use nitro by bursts, greatly improving its efficiency
2)Makes the AI use nitro when close to max speed (to unlock the max speed increase)
3)Remove the overtaking logic as the AI will now use its nitro anyway
4)The AI tries to keep a reserve of nitro for use towards the end of the race.

* Allows estimated finish time to be checked at any lap, fix a crash

* Makes the AI use its nitro reserves

* Better tuning for nitro reserve usage to reduce the probability of unused nitro

* Remember last used powerup for AI

* Remember last used powerup for AI

* Remember last used powerup for AI

* Remember last used powerup for AI

* Remember last used powerup for AI

* Remember last used powerup for AI

* Fix compilation

* AI don't wait between usage of items of different types

* Use floats for Parachute duration

* Revert

* Nitro use when trying to pass a bomb improved

* Fix broken time check

* Take into account the kart-specific fadeout to calculate time between bursts

* Improvements to bursts and to use of the reserve at the end

* Improve comments explaining item_usage_skill and nitro_usage

* Make LastUsedPowerup a PowerupType

* Make LastUsedPowerup a PowerupType

* Make LastUsedPowerup a PowerupType

* Make LastUsedPowerup a PowerupType

* Make last_used_powerup a PowerupType

* Make last_used_powerup a PowerupType

* Fix compilation

* Fix compilation

* Revert

* Revert

* Finally fix compilation

* Finally fix compilation

* Change shield radius per difficulty

A reduced non-null shield radius reduces false positives as long as it is big enough to get a few frames during which the object is inside the radius.

* Improve Projectile closeness management

* Improve projectileCloseType

* Improve projectileCloseType

* Fixes indentation

* Fix lastUsedPowerup initialization

* Fix the last used powerup type

* Rename projectileCloseType

* Rename projectilCloseType

* Clarify comment and update projectileCloseType to new name

* Reuse a member RandomGenerator

* Fixes getLastUsedPowerup type

* Fixes comparison

* Fixes type
2018-03-31 21:09:57 -04:00
hiker
1b72d88593 Merge remote-tracking branch 'origin/kobato' into game_protocol 2018-03-31 01:12:22 +11:00
hiker
7e3fc660f1 Moved wrong-way timer from kart into linear world. 2018-03-31 00:16:47 +11:00