summaryrefslogtreecommitdiff
path: root/0.F_backport-radio-can-use-ups.patch
blob: ee146e5eaba9fdaab1103a4e4b7042cb21cef687 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
--- a/src/iuse.cpp
+++ b/src/iuse.cpp
@@ -289,6 +289,7 @@
 static const std::string flag_HEATS_FOOD( "HEATS_FOOD" );
 static const std::string flag_PLANT( "PLANT" );
 static const std::string flag_PLOWABLE( "PLOWABLE" );
+static const std::string flag_USE_UPS( "USE_UPS" );
 
 // how many characters per turn of radio
 static constexpr int RADIO_PER_TURN = 25;
@@ -2162,7 +2163,8 @@
         }
     } else { // Activated
         int ch = 1;
-        if( it->ammo_remaining() > 0 ) {
+        if( it->ammo_remaining() > 0 || ( it->has_flag( flag_USE_UPS ) &&
+                                          p->has_enough_charges( *it, false ) ) ) {
             ch = uilist( _( "Radio:" ), {
                 _( "Scan" ), _( "Turn off" )
             } );
@@ -4082,7 +4084,8 @@
     if( t ) { // Effects while simply on
 
     } else {
-        if( !it->units_sufficient( *p ) ) {
+        if( !it->units_sufficient( *p ) || !( it->has_flag( flag_USE_UPS ) &&
+                                              p->has_enough_charges( *it, false ) ) ) {
             p->add_msg_if_player( m_info, _( "Your tactical tonfa is out of power." ) );
             it->convert( "shocktonfa_off" ).active = false;
         } else {
@@ -4107,7 +4110,8 @@
 int iuse::mp3( player *p, item *it, bool, const tripoint & )
 {
     // TODO: avoid item id hardcoding to make this function usable for pure json-defined devices.
-    if( !it->units_sufficient( *p ) ) {
+    if( !it->units_sufficient( *p ) || !( it->has_flag( flag_USE_UPS ) &&
+                                          p->has_enough_charges( *it, false ) ) ) {
         p->add_msg_if_player( m_info, _( "The device's batteries are dead." ) );
     } else if( p->has_active_item( "mp3_on" ) || p->has_active_item( "smartphone_music" ) ||
                p->has_active_item( "afs_atomic_smartphone_music" ) ||
@@ -6367,9 +6371,12 @@
 int iuse::einktabletpc( player *p, item *it, bool t, const tripoint &pos )
 {
     if( t ) {
-        if( !it->get_var( "EIPC_MUSIC_ON" ).empty() && ( it->ammo_remaining() > 0 ) ) {
+        if( !it->get_var( "EIPC_MUSIC_ON" ).empty() &&
+            ( it->ammo_remaining() > 0  || ( it->has_flag( flag_USE_UPS ) &&
+                                             p->has_enough_charges( *it, false ) ) ) ) {
             if( calendar::once_every( 5_minutes ) ) {
-                it->ammo_consume( 1, p->pos() );
+                //it->ammo_consume( 1, p->pos() );
+                p->consume_charges( *it, 1 );
             }
 
             //the more varied music, the better max mood.