Christoph Oelckers
cf3c573222
- give the first 16 DEHEXTRA states proper content.
...
No idea where this BLD2 stuff came from...
2021-05-07 23:03:46 +02:00
Blue Shadow
55ce0510c2
- added a A_SetFriendly function
2021-04-04 08:57:56 +02:00
sgrunt
0c776e3acd
Move the modified behaviour to a new "resetvel" parameter
2021-03-19 20:12:20 +01:00
Blue Shadow
acd553aa6f
- account for KEEPDEPLETED flag when destroying items with InterHubAmount of 0 upon leaving a level
2021-03-19 20:10:25 +01:00
nashmuhandes
229b065289
Add missing tag for Strife's KneelingGuy.
2021-03-18 19:11:37 +01:00
nashmuhandes
43937e4338
Add missing tag for the sub-Entity bosses. This was missed in the previous commit.
2021-03-15 22:05:25 +01:00
nashmuhandes
b28e5cb917
Add GetCharacterName() to retrieve an NPC's name as defined in its dialogue script, if it exists. Otherwise it will just return the same output as GetTag().
2021-03-15 21:31:16 +01:00
nashmuhandes
45c1cc8c08
Add tag properties to Strife's enemies.
2021-03-15 20:10:49 +01:00
nashmuhandes
c7edb9d22f
Add a null check in PlayerPawn::CheckFOV
2021-02-28 20:01:59 +01:00
Xaser Acheron
41ab1e4994
adjust defaults for DEHEXTRA states to match other ports:
...
- sprite is TNT1
- duration is -1
- next frame is itself
2021-02-24 22:46:50 +01:00
Marisa Kirisame
44b4359ba5
Add alternate "Full" mode for PowerIronFeet that prevents leaky damage.
2021-01-16 17:09:57 +01:00
Rachael Alexanderson
c28e53511c
- fix bonuscount as uint
2021-01-05 19:48:32 -05:00
Rachael Alexanderson
e6c71c2f0c
- reimplement fix #1267 from @drfrag666 differently - fix damagecount overflow
2021-01-05 11:09:19 -05:00
Player701
a6a02a2a6c
- Fixed: RandomSpawner spawning another RandomSpawner spawning a missile could result in the second RandomSpawner being erroneously destroyed.
2020-12-02 15:30:23 +01:00
Christoph Oelckers
e19b1b2ee7
- fixed: IceGuyFX2 set its owner too late.
2020-11-25 07:37:17 +01:00
Chronos Ouroboros
75c791ecff
Fixed the previous commit not accounting for mods that already fixed this internally.
2020-11-14 14:53:43 -03:00
Chronos Ouroboros
0aefc61f86
Fixed weapon bob jittering.
2020-11-14 14:34:09 -03:00
Major Cooke
7477dfa922
Converted scale and pivot to vectors, and rotation to an angle.
2020-10-25 15:42:12 +01:00
Major Cooke
a6bbddf167
Finished implementing PSprite interpolation for vertices.
...
- Setting WOF_INTERPOLATE on any of the functions with flags (except A_OverlayFlags) will enable one tic for interpolating.
- Setting PSPF_INTERPOLATE with A_OverlayFlags will permanently enable it for that layer, but requires manual calling.
2020-10-25 15:42:11 +01:00
Major Cooke
7c4c0163a3
Added A_OverlayPivotAlign and A_OverlayVertexOffset.
...
A_OverlayPivotAlign(int layer, int halign, int valign)
- Aligns the pivot point origin to a corner of the PSprite before applying offsets.
- - halign: Horizontal. Applicable constants are PSPA_<LEFT/CENTER/RIGHT>.
- - valign: Vertical. Applicable constants are PSPA_<TOP/CENTER/BOTTOM>.
- - Default is top left.
A_OverlayVertexOffset(int layer, int index, double x, double y, int flags)
- Allows offsetting the corners of the psprite, granting modders the ability to skew weapon sprites as they see fit.
- - index: The index of the vertice. Valid ranges are between [0,3].
- - x/y: Offsets of vertices.
- - flags: Takes WOF_ flags.
Other changes:
- Removed pivot point interpolation since it's pointless.
- Removed PSPF_PIVOTSCREEN due to complications with it having relativity. This will be revisited either later or in another submission.
- Added ResetPSprite() to be called with BringUpWeapon(), A_Lower(), and morph weapon raising to reset all the new properties to 0.
Nearly ready now. Just some final testing needed.
2020-10-25 15:42:11 +01:00
Major Cooke
4a3a5c3877
Replaced PSPF_PIVOTOFFSETREL with WOF_RELATIVE.
...
The idea behind this is to outright remove the relative position adding from the engine side and let it happen with A_OverlayOffset instead. Still more work to do.
2020-10-25 15:42:09 +01:00
Major Cooke
8f74cebd44
Added code for rotating the PSprite, courtesy of IvanDobrovski.
...
- However, the XY offsets are relative as a result.This must be made toggleable.
2020-10-25 15:42:09 +01:00
Major Cooke
e5ca3caa6c
Setting everything up.
2020-10-25 15:42:08 +01:00
Major Cooke
60f0d35477
Added ThruBits.
2020-10-17 09:51:24 +02:00
Nash Muhandes
cfbf115c4b
Change A_OverlayTranslation to accept a named translation instead. ( #1215 )
...
For more advanced use cases, the Translation member of PSprite can be written to directly.
2020-10-12 11:43:37 -04:00
Nash Muhandes
7bea14e6b2
- Add A_OverlayTranslation to set PSprite translations ( #1202 )
...
- Added PSPF_PLAYERTRANSLATED support to the software renderer
2020-10-11 17:14:06 -04:00
Player701
ffb4c52c96
- Added NORANDOMPUFFZ flag to A_Saw
2020-10-04 08:07:13 +02:00
nashmuhandes
56a387ac82
- Fix weapon bobbing interpolation
...
There was a visual issue where the weapon bobbing would only start interpolating after the player's movement velocity exceeds a certain value.
(Thanks to @Doom2fan for the solution)
2020-10-04 08:06:34 +02:00
Christoph Oelckers
c1e04b29d1
- AActor size reduction
...
* a few shorter fields were moved into alignment gaps
* the visible angles are now stored as floats. Since these are only used for rendering the loss of precision is negligible, but this shortens AActor by 16 bytes alone.
2020-10-03 08:23:36 +02:00
Nikolay Ambartsumov
a72fdd7e3e
Add MaxSlopeSteepness actor property
2020-10-03 07:53:55 +02:00
makise-homura
5720a54da4
Add species parameter to A_RadiusThrust
...
This is the last parameter for A_RadiusThrust() DECORATE function.
If it is omitted or none, then A_RadiusThrust will behave as usual.
If it is set for some species name, it witt thrust only that species.
Of course, these species should be +VULNERABLE to be thrustable.
2020-09-27 13:58:22 +02:00
Marisa Kirisame
58f5c030fe
Add Travelled virtual for PlayerPawn, akin to the same function for Inventory. ( #1169 )
2020-09-02 06:12:58 -04:00
Marisa Kirisame
e0aa8db616
Add Pre/PostTeleport virtuals, for special handling of actor teleportation.
2020-09-02 12:02:09 +02:00
MajorCooke
eaba63e13b
View Angles (Part 1 - Redux) ( #1002 )
...
* Added ViewAngle/Pitch/Roll properties to actors.
- These are offsets for camera angles that allow turning the camera without affecting aim or movement direction.
- Added A_SetView<Angle/Pitch/Roll>, which will set the view direction.
- Added ABSVIEWANGLES flag, used to make the view absolute instead of an offset.
* Converted functions to be direct-native.
2020-08-27 13:03:06 -04:00
MajorCooke
85759e3bd0
Added A_SpriteOffset. ( #895 )
...
- Coordinates work akin to A_OverlayOffset: +X shifts to the right, +Y shifts down.
2020-08-27 12:43:09 -04:00
alexey.lysiuk
c20a7f53c9
- do not report missing camera target if its TID is zero
...
This handles the case with setting TID of thing to follow after camera spawning, e.g. via ACS
https://forum.zdoom.org/viewtopic.php?t=69690
2020-08-27 11:57:25 +03:00
Blue Shadow
7179eaacda
- fixed: the minotaur spawned its floor flames regardless of the setting of compat_minotaur
...
A_MinotaurAtk3 was checking against the CVAR instead of the compatibility flag constant.
2020-07-28 12:25:35 +02:00
Rachael Alexanderson
383f3e5fd6
- change recent /0 fix to conform to UDMF specs
2020-06-25 09:30:52 -04:00
Christoph Oelckers
486e07300c
- fixed: Inventory items that are terminated by GoAwayAndDie must be removed from the blockmap and sector lists.
...
Since they were just scheduled for delayed deletion any map related action they can trigger is unwanted.
2020-06-16 01:11:08 +02:00
Christoph Oelckers
d739587f6b
- let blastradius work without an effect actor.
2020-06-12 23:14:58 +02:00
Kevin Caccamo
79426c028b
Fix Bag of Holding not increasing Firemace ammo capacity
2020-06-08 15:07:31 +03:00
Alexander Kromm
928c738e19
make various getter and pure-math methods clearscope, and where applicable, const
...
Original PR: https://github.com/coelckers/gzdoom/pull/532
Status of the original PR
1. Actor
- [already in] deltaangle
- [already in] absangle
- [already in] AngleToVector
- [already in] RotateVector
- [already in] Normalize180
- [already in] BobSin
- [already in] GetDefaultSpeed
- [this PR] GetBobOffset
- [this PR] InStateSequence
- [already in] FindState
- [already in] GetDropItems
- [this PR] DistanceBySpeed
- [this PR] AccuracyFactor
- [not in original PR, for PlayerInfo.isTotallyFrozen] isFrozen
2. PlayerInfo
- [this PR] GetUserName
- [this PR] GetColor
- [this PR] GetDisplayColor
- [this PR] GetColorSet
- [this PR] GetPlayerClassNum
- [this PR] GetSkin
- [this PR] GetNeverSwitch
- [this PR] GetGender
- [this PR] GetTeam
- [this PR] GetAutoaim
- [this PR] GetNoAutostartMap
- [this PR] GetClassicFlight
- [this PR] IsTotallyFrozen
3. C++ methods, to match ZScript:
- [scriptified] AActor::AccuracyFactor() to Actor.AccuracyFactor
- [this PR] AActor::DistanceBySpeed(AActor *, double) — it is a combination of getter and pure math
- [this PR] AActor::Distance2D(AActor *, bool) — called by DistanceBySpeed
- [this PR] AActor::Distance2D(AActor *, double, double, bool) — called by DistanceBySpeed
- [not in original PR, for PlayerInfo.isTotallyFrozen] AActor::isFrozen
2020-06-07 09:39:30 +02:00
Christoph Oelckers
1d1331289a
- there is no mace ammo in the bag of holding.
2020-06-06 16:19:11 +02:00
Hugo Locurcio
80c5b4d37b
Add a cvar to control weapon bobbing while firing
...
This simulates a feature found in Crispy Doom, which keeps the
weapon bobbing while firing. This leads to a "smoother" appearance
which may look a bit prettier to some people.
The default value of 0 preserves the old behavior.
2020-05-31 23:12:11 +02:00
Christoph Oelckers
6444a7535c
- fixed use of Powerup.Strength in PowerInvisibility.
...
An integer division made the feature useless.
2020-05-25 16:43:01 +02:00
alexey.lysiuk
1fd2ea46d2
- fixed aiming camera that didn't follow target
...
https://forum.zdoom.org/viewtopic.php?t=68600
2020-05-18 14:00:48 +03:00
alexey.lysiuk
0631670a66
- restored warning about missing aiming camera target
2020-05-18 13:58:22 +03:00
Major Cooke
079e7ee4e9
Enforce the reflective flag as well.
2020-05-10 10:48:32 +02:00
Major Cooke
b70bc2b152
Fixed an issue where multiple invulnerability powerups could cancel each other out from just one expiring.
2020-05-10 10:48:32 +02:00
Mekboss
4807f4240b
Fix MSVS compile bug and add offset parameter for SprayDecal
2020-05-07 09:35:48 +02:00
Mekboss
0e9ca3c850
Replace function variables to DVector3
2020-05-07 09:35:48 +02:00
Mekboss
ba43244764
Add optional direction parameters for SprayDecal and its A_SprayDecal zscript counterpart
2020-05-07 09:35:48 +02:00
Cacodemon345
4b4ff8dd0e
Fix bouncing missiles not dealing damage when hitting top/bottom ( #1068 )
...
* Fix bouncing missiles not dealing damage when hitting top/bottom
2020-04-30 08:55:09 +02:00
Christoph Oelckers
4fb6b7c7d4
- block off the Substitute function by making it private to the 3 classes that really need it.
2020-04-19 21:08:24 +02:00
Major Cooke
a56177f178
Begin TICRATE conversion.
...
- Moved TICRATE from Thinker to Object in ZScript so status bars have access to it.
2020-04-12 22:43:33 +02:00
nashmuhandes
cb6514cc05
Added Actor.CopyBloodColor to copy another existing actor's blood color.
2020-03-23 21:04:59 +01:00
nashmuhandes
7a141f3aa3
Add help messages for most of the deprecated stuff in ZScript.
2020-03-14 12:56:03 +02:00
alexey.lysiuk
f46e80e2b4
- fixed FLineTraceData scripting definition
...
https://forum.zdoom.org/viewtopic.php?t=67795
2020-03-14 12:51:06 +02:00
Christoph Oelckers
4201c4fbb5
- fixed A_FireCGun.
2020-03-11 19:47:23 +01:00
Christoph Oelckers
a638cfbd6e
- fixed: player_t::GetPSprite cannot guarantee success
...
As a consequence it must return null in the failure case instead of asserting and all calls to this function must check for the failure case.
2020-03-11 00:56:29 +01:00
Major Cooke
70f9b649aa
Changed Pre/Post(Un)Morph to take the other actor and a boolean indicating direction.
...
- 'current' is true for the actor that is the new body, false for the old body.
2020-03-08 15:29:09 +01:00
Major Cooke
33b343ef31
Added Pre(Un)Morph and Post(Un)Morph functions.
...
- cls: The other class's cast type which the actor is transitioning from/to.
2020-03-08 15:29:09 +01:00
Rachael Alexanderson
3d3a29979b
- remove addition from deprecated A_PlaySound
2020-03-02 22:15:37 +01:00
Rachael Alexanderson
1b80b7bf2f
- ported over Nash's startTime for A_StartSound
2020-03-02 22:15:37 +01:00
Major Cooke
4cf7c6351d
Added A_StopSounds(int chanmin, int chanmax).
...
- If both channels are 0, completely silences the actor.
- Adapted A_StopAllSounds to call A_StopSounds(0,0);
2020-03-01 19:42:21 +01:00
Major Cooke
55284d46bf
Added A_StopAllSounds.
2020-02-29 19:19:51 +01:00
Chronos Ouroboros
bb42d58427
Revert "Added support for standard DamageFactor property on Armor, PowerProtection and PowerDamage items."
...
This reverts commit e781cb4043
.
2020-02-10 15:38:12 -03:00
Major Cooke
e781cb4043
Added support for standard DamageFactor property on Armor, PowerProtection and PowerDamage items.
2020-02-09 19:07:52 +01:00
Major Cooke
39a9a48ad6
Added source, inflictor and damage flags to AbsorbDamage.
2020-02-09 19:07:52 +01:00
alexey.lysiuk
081cf814b0
- fixed wrong arguments of a few A_StartSound() calls
...
https://forum.zdoom.org/viewtopic.php?t=67074
2020-01-24 11:57:01 +02:00
Christoph Oelckers
c0b9bb6e76
- bumped ZScript version to 4.3 and silenced the remaining deprecation warnings.
2020-01-04 14:25:56 +01:00
Christoph Oelckers
4a67bfcddb
- deprecated A_PlaySound for real and transitoned the internal scripts to A_StartSound
2020-01-04 14:25:55 +01:00
Christoph Oelckers
b7e1a35e6f
- cleaned up the parameters of A_StartSound.
...
There were two booleans that could be merged into the flag word.
This also fixes a bug with CHAN_NOSTOP not working for local sounds because it checked the wrong sound source for the playing sound.
2020-01-04 14:25:55 +01:00
Christoph Oelckers
f647f3c132
- added the Dehacked extensions from Crispy/Doom Retro.
...
All empty placeholders for mods to fill in, no new functionality.
2019-12-31 21:13:18 +01:00
Chronos Ouroboros
b4ba7dfec2
Fixed a regression in DoTakeInventory. (the C++ code just ignored the null pointer, but ZScript can't do that)
2019-12-30 12:37:33 -03:00
Cacodemon345
7fd27bc925
Add PSPF_PLAYERTRANSLATED flag (makes a PSprite layer translated to the user's color)
2019-12-30 13:05:38 +01:00
Christoph Oelckers
d08bb93b84
- elimintated all cases from the ZScript code where channel indices and flags were combined into one parameter and removed all remnants of CHAN_PICKUP.
2019-12-30 09:47:25 +01:00
Christoph Oelckers
136ab4f48a
- renamed IsActorPlayingSomething to IsActorPlayingSound and made it clearscope.
2019-12-17 09:58:50 +01:00
Christoph Oelckers
e82565373f
- separated the channel number from the flags in the sound interface so that the 8 channel limit can be eliminated.
...
- added Marisa Kirisame's CHAN_OVERLAP flag.
- exported S_IsActorPlayingSomething to ZScript.
The sound API change required deprecating A_PlaySound and S_Sound. There are now new variants S_StartSound and A_StartSound which have two distinct parameters for channel and flags.
2019-12-16 23:52:39 +01:00
Christoph Oelckers
b9582cc98e
- continued refactoring on sound code.
...
The game independent part of the code has been mostly isolated.
2019-12-08 21:22:53 +01:00
alexey.lysiuk
ad89f1381c
- fixed missing fullbright for Berserk
...
https://forum.zdoom.org/viewtopic.php?t=66307
2019-11-05 15:32:00 +02:00
alexey.lysiuk
10078f519a
- fixed missing frames for axe attack without mana
...
The target state to jump is S_FAXEATK_5 in the original Hexen, but we were jumping to S_FAXEATK_7
5329fb5d75/src/hexen/info.c (L1298-L1299)
https://forum.zdoom.org/viewtopic.php?t=66216
2019-10-26 11:32:27 +03:00
Christoph Oelckers
8b10d231cd
- when adding some minmum lateral movement to trigger collision detection, do not just set Vel.X but actually use a vector pointing in the proper facing direction of the actor.
2019-10-20 14:02:28 +02:00
alexey.lysiuk
89ecd7a964
- fixed: pickup flash didn't fade out if player was killed by pickup
...
https://forum.zdoom.org/viewtopic.php?t=66135
2019-10-16 18:13:01 +03:00
PaulyB
223b62aa59
Wrong offset on Fighter's Fist
2019-09-10 18:52:17 +02:00
alexey.lysiuk
37fa2e1b67
- fixed initial setup for dynamic light actors
...
They are attached and actived explicitly during usual actor initialization sequence
Postponed processing applicable to so called user dynamic lights must be skipped for them
RECREATELIGHTS flag handling for dynamic light actors had the opposite effect of deactivating them
https://forum.zdoom.org/viewtopic.php?t=65683
2019-09-02 12:20:13 +02:00
Christoph Oelckers
cf74118d53
- fixed the extremely long standing bug that Lost Souls didn't reacquire their target when slamming into something.
...
This was one of that annoying old design mistakes where Doom and Heretic features were poorly merged together. The Heretic Gargoyle uses very similar coding but performs a subtly different action when actually hitting another actor. This different action was made the default, even for the Lost Soul.
It has now been changed that both monsters use their original action, being distinguished by an actor flag. For compatibility with custom definitions Heretic's behavior, which has been the default in ZDoom will be the preferred one. The one of the Lost Soul can be reactivated by a flag.
2019-08-11 09:00:29 +02:00
Blue Shadow
5abffabb56
- moved GetSaveAmount() from the base armor class
2019-08-03 11:14:03 +03:00
Blue Shadow
479a992a3e
- fixed buggy ArmorFactor behavior when set to a value other than 1.0
2019-08-02 15:10:06 +03:00
alexey.lysiuk
222dfd17b7
- added ability to specify display duration of subtitles
...
Duration of sound playback and subtitles display will be synchronized if sound id is specified
For existing Strife messages this works out of the box
https://forum.zdoom.org/viewtopic.php?t=65379
2019-07-26 20:11:42 +02:00
Christoph Oelckers
b4aacb7be5
- fixed: The numcommands value in A_KoraxCommand needs to be decremented by one because the max parameter of the random function is inclusive.
2019-07-25 20:42:41 +02:00
Major Cooke
15eabfd055
Added A_SoundPitch and an optional pitch parameter to A_PlaySound and S_Sound.
...
- Note: Because sound channels are not in zscript, there's no way to modify a sound made by S_Sound.
2019-07-24 20:15:24 +02:00
Christoph Oelckers
b360f04e28
- use proper interface calls to give the initial BasicArmor to the player.
...
The old code didn't check if giving the item was proper and just went ahead adding it to the inventory unconditionally.
2019-07-17 20:08:43 +02:00
alexey.lysiuk
9603a09f82
- added PSprite.bMirror flag to ZScript class definition
...
https://forum.zdoom.org/viewtopic.php?t=65372
2019-07-17 12:20:05 +03:00
Rachael Alexanderson
f7c110698f
- add +ZDOOMTRANS to BFGExtra in order to force classic transparency per user setting.
2019-07-16 16:52:30 -04:00
Christoph Oelckers
8b4d85f0d7
- tested and fixed the attachable lights.
2019-07-07 09:50:02 +02:00
Christoph Oelckers
1dcbe43d95
- User definable dynamic lights
...
This hasn't been tested yet!
2019-06-28 12:35:42 +02:00
alexey.lysiuk
d5d509ea10
- switched to unconditional level exit in scriptified actors
...
Action special may not work properly in a very specific setup
E.g., exit to the next level within a hub via boss brain death was broken
2019-06-16 15:05:36 +02:00
Blue Shadow
b026b7a880
- fixed PlaySpawnSound call in A_ThrowGrenade
2019-06-05 11:28:59 +03:00
Christoph Oelckers
61ead74492
- made the colorset names and the texts in the color picker localizable.
2019-05-19 18:57:39 +02:00
Christoph Oelckers
04334aa0fe
- implemented subtitle display for Blackbird's voiceover messages.
2019-05-19 12:16:42 +02:00
player701
32109a75a7
- Fixed random generation of friendly obituaries
2019-05-04 21:06:09 +02:00
Christoph Oelckers
03828bb759
- removed the leftovers of the removed savedamount variable.
2019-04-26 12:00:58 +02:00
Christoph Oelckers
3bb42aaff7
- removed the MaxAmount fudging from MaxHealth.
2019-04-26 09:58:58 +02:00
Christoph Oelckers
23e2b1c0c0
- use Obituary for both Demon and Spectre.
2019-04-23 10:49:18 +02:00
Player701
ad23726cb6
- Fixed conditions tested for when checking whether "Force respawn" or "Respawn protection" dmflags are enabled
2019-04-14 05:40:23 -04:00
Christoph Oelckers
dc67355e95
- added A_Explode compatibility options.
...
There are two options here - one only disables the vertical thrust and the other goes back fully to the original non-z-aware code.
Both options are settable through MAPINFO.
For the compatibility presets, the normal ones only disable the vertical thrust, the strict ones force use of the old code entirely.
2019-03-24 12:42:57 +01:00
Christoph Oelckers
6e0e221804
- give Hexen's PoisonCloud the OLDRADIUSDMG flag.
...
This actor has such oddball semantics that it's better not subjected to the revised radius damage code.
2019-03-19 19:54:46 +01:00
Christoph Oelckers
cda248df66
- localized some user-facing texts that were still string literals.
2019-03-19 00:37:43 +01:00
Christoph Oelckers
c0d333ee56
- adjusted the script-side MidPrint calls to honor the con_midconsolefont CVAR.
2019-03-11 22:44:28 +01:00
Sterling Parker
cabe0c583e
Add LookScale property
...
As requested by @coelckers.
2019-03-07 21:22:33 +01:00
Sterling Parker
ae1a1df02d
Add LookScale variable on weapon
...
This variable allows a weapon to set a custom look sensitivity multiplier without fiddling with FOVScale / DesiredFOV hacks.
2019-03-07 21:22:33 +01:00
Major Cooke
6327734659
Added CanTouchItem virtual.
...
- Allows an actor with +PICKUP flag to determine if it can pick up specific items or not.
2019-03-04 13:15:27 +01:00
Christoph Oelckers
0febe20a08
- fixed: Unmorphing a monster did not clear its UNMORPHED flag.
2019-03-02 13:15:38 +01:00
Christoph Oelckers
b542d1371d
- reorganized the ZScript content in gzdoom.pk3 and changed the files' extensions to something unique for easier syntax highlighting.
2019-02-23 12:08:27 +01:00